Integración de Heroku y Github (cómo estructurar el proyecto)
-
20-09-2019 - |
Pregunta
Estoy creando un servicio web y quiero almacenar la fuente en github y ejecutar la aplicación en heroku.Hasta ahora no he visto mi escenario exacto abordado en ningún lugar de la red, así que lo preguntaré aquí:
Quiero tener la siguiente estructura de directorios:
/project
.git
README <-- project readme file
TODO.otl <-- project outline
... <-- other project-related stuff
/my_rails_app
app
config
...
README <-- rails' readme file
En lo anterior, el proyecto corresponde a http://github.com/myuser/project, y my_rails_app es el código que se debe enviar a heroku.¿Necesito una rama separada para la aplicación Rails o me falta una forma más sencilla?
Supongo que los archivos no relacionados con Rails relacionados con mi proyecto podrían vivir en my_rails_app, pero el archivo README de Rails ya se encuentra allí y parece inconsistente sobrescribirlo.Sin embargo, si lo dejo, mi página de github para la aplicación Rails contendrá el archivo Léame de Rails, lo cual no tiene sentido.
También ...Intenté configurarlo como se describe arriba y ejecutar
git push heroku
desde la carpeta principal del proyecto.Por supuesto, Heroku no sabe que quiero implementar la subcarpeta:
-----> Heroku receiving push
! Heroku push rejected, no Rails or Rack app detected.
Solución
Aquí hay una solución simple que puede o no puede trabajar para usted.
-
Cree dos proyectos en Github. Uno de los proyectos debe ser sólo la aplicación Rails (es decir, todo dentro del directorio de aplicación Rails). El otro proyecto debería ser todo lo que fuera del directorio de aplicación Rails.
-
Agregue el proyecto aplicación Rails como git-submódulo dentro del proyecto "contenedor".
-
Ahora puede agregar Heroku como un control remoto en la aplicación repositorio de rieles por separado y empujarlo a heroku. Heroku aceptará el empuje, ya que es sólo una aplicación Rails con los directorios y archivos esperados.
Otros consejos
Una solución para la situación de Heroku (no el archivo README):
Si estás usando el nuevo Cedro Heroku (Creo que no estaba disponible cuando hizo su pregunta por primera vez) entonces sus procesos (como el proceso del servidor Rails) comienzan a usar Capataz.Así, puedes colocar un Procfile
en el directorio raíz de github que se ve así:
web: my_rails_app/script/runserver.sh
Y luego my_rails_app/script/runserver.sh
podría ser un simple
#!/bin/sh
cd my_rails_app
bundle exec rails server -p $PORT
Localmente, también deberías crear un archivo llamado .env
(nota la .al principio), que contiene
PORT=3000
Este archivo lo lee el capataz y lo usa para establecer variables de entorno para que el puerto se establezca cuando se ejecuta foreman start
en su máquina (desde el directorio raíz de github, donde se encuentra el Procfile).El servidor Heroku se encarga del archivo .env en su banco de pruebas.¡La gran ventaja es que puedes configurar múltiples procesos en el banco de pruebas de esa manera!
Sólo sobrescribir el archivo README
por defecto de Rails. No hay ninguna razón para mantener a su alrededor. Ponga su otra materia relacionada con la gestión de proyectos en el directorio doc
. Aunque es cierto que tiene razones válidas para querer configurarlo de la manera que lo hizo, sólo estás creando un dolor de cabeza por sí mismo yendo contra las convenciones, y es probable que no vale la pena el beneficio.
Yo añadiría todo por debajo /my_rails_app
al repositorio git Heroku. A continuación, añadir GitHub como un control remoto y añadir todo por debajo /project
al repositorio GitHub. A continuación, puede empujar la aplicación Rails a Heroku (de /my_rails_app
) y empujar el proyecto completo a GitHub (de /project
).