Tengo un proyecto que usa Serve y está controlado por versiones usando Git. Serve crea una output
carpeta con archivos estáticos que quiero implementar en Heroku.
No quiero implementar el proyecto Serve en sí, ya que a la pila de Heroku Cedar no parece gustarle demasiado, pero lo más importante es que quiero aprovechar el excelente soporte de Heroku para sitios web estáticos.
¿Hay alguna forma de implementar una subcarpeta en un control remoto de git? ¿Debo crear un repositorio de Git en la output
carpeta (eso suena mal) y enviarlo a Heroku?
Respuestas:
Hay una forma aún más fácil a través de git-subtree . Suponiendo que desea enviar la 'salida' de su carpeta como raíz a Heroku, puede hacer:
Actualmente, parece que git-subtree se está incluyendo en git-core, pero no sé si esa versión de git-core ya se ha lanzado.
fuente
--force
, usegit push heroku `git subtree split --prefix output master`:master --force
. Consulte stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Pero esto no funciona y vuelve+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. Necesito este tipo de funcionalidad para poder realizar un roleback a etiquetas específicas más adelante. ¿Cuál es la forma correcta de hacerlo?output
carpeta que solo estaba presente en midevelop
rama a laheroku master
rama sin la necesidad de especificardevelop:master
, por lo que aparentemente empuja a la rama de destino que especifica desde su rama actualmente desprotegida.Comencé con lo que dijo John Berryman, pero en realidad puede ser más simple si no te importa en absoluto la historia de heroku git.
Supongo que oficial
git subtree
es la mejor respuesta, pero tuve problemas para que el subárbol funcionara en mi mac.fuente
Tuve un problema similar. En mi caso, nunca fue un problema eliminar todo en el repositorio de heroku y reemplazarlo con lo que esté en mi subdirectorio. Si este es tu caso, puedes usar el siguiente script bash. Simplemente colóquelo en el directorio de su aplicación Rails.
Estoy seguro de que hay muchas formas de mejorar esto, ¡así que no dudes en decirme cómo!
fuente
+1
Gracias. Esta solución funciona muy bien si no le importan los registros de git en Heroku. Se puede modificar el script anterior en caso de que haya algunas carpetas que desee ignorar, dentro de la ruta secundaria de la aplicación que se implementará. Por ejemplo, no queríaspec
carpeta en heroku. Ejemplo Gist+1
pero puede simplificar no tirando y fusionándose con heroku master y en su lugar simplementegit push --force heroku master
Después de un largo y duro mes de probar cosas diferentes y ser mordido cada vez que me di cuenta,
solo porque Heroku usa un repositorio git como mecanismo de implementación, no debe tratarlo como un repositorio git
podría haber sido rsync igual de bien, fueron por git, no te distraigas por esto
si lo hace, se abre a todo tipo de heridas. Todas las soluciones mencionadas fallan miserablemente en alguna parte:
bundle deploy
- falla, necesita actualizar el paquete cada vez:path
+bundle deploy
- falla, el equipo de desarrollo considera la:path
opción como "no estás usando Bundler con esta opción de gema", por lo que no se empaquetará para producción./vendor
enlace simbólico en desarrollo y copiar los archivos para producción.La solución
La aplicación en cuestión tiene 4 proyectos en git root:
Todos los proyectos tienen un
vendor/common
enlace simbólico que busca en la raíz delcommon
motor. Al compilar el código fuente para la implementación en heroku, necesitamos eliminar el enlace simbólico y rsync, su código para que esté físicamente en la carpeta del proveedor de cada host por separado.Funciona muy, muy bien en la naturaleza con problemas mínimos (¿no?) 6 meses ahora
Aquí está el script https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Actualización 1
@AdamBuczynski, nunca es tan sencillo.
Primero, siempre tendrá un entorno de producción y prueba al menos, y un montón de clústeres específicos de funciones en el peor de los casos, de repente, 1 carpeta debe mapearse en n proyectos de heroku como un requisito bastante básico y todo debe organizarse de alguna manera para que la secuencia de comandos "sabe" qué fuente desea implementar y dónde,
En segundo lugar, querrá compartir código entre proyectos; ahora viene la
sync_common
parte, los shennanigans con enlaces simbólicos en desarrollo se reemplazan por código real sincronizado en Heroku porque Heroku requiere una cierta estructura de carpetas y un paquete y rubygems realmente realmente hacen que las cosas sean feas, muy mal si usted quiero extraer los hilos comunes en una gemaEn tercer lugar, querrá conectar CI y cambiará un poco la forma en que las subcarpetas y el repositorio de git deben organizarse, al final, en el caso de uso más simple posible, terminará con la esencia mencionada anteriormente.
En otros proyectos, necesito conectar compilaciones de Java, cuando venda software a varios clientes, necesitará filtrar los módulos que se instalan según los requisitos de instalación y otras cosas,
Realmente debería considerar explorar la posibilidad de agrupar cosas en un Rakefile o algo así y hacer todo de esa manera ...
fuente