2010-03-16 16 views
24

Estoy creando un servicio web y quiero almacenar la fuente en github y ejecutar la aplicación en heroku. No he visto a mi mismo escenario se dirigió a cualquier parte de la 'red hasta el momento, así que voy a pedir aquí:Integración de Heroku y Github (cómo estructurar el proyecto)

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 debe enviarse a heroku. ¿Necesito una sucursal separada para la aplicación Rails, o hay una forma más simple que me falta?

Supongo que mis archivos no-rails relacionados con el proyecto podrían vivir en my_rails_app, pero los rieles README ya viven allí y parece inconsistente sobreescribir eso. Sin embargo, si lo dejo, mi página de github para la aplicación de rieles contendrá el léame de carriles, lo que no tiene sentido.

también ... He intentado simplemente su puesta en marcha como se describe anteriormente y en funcionamiento

git push heroku 

de la carpeta principal del proyecto. Por supuesto, heroku no sabe que yo quiero para desplegar la subcarpeta:

-----> Heroku receiving push 
!  Heroku push rejected, no Rails or Rack app detected. 

Respuesta

18

Aquí hay una solución simple que puede o no funcionar para usted.

  • Cree dos proyectos en GitHub. Un proyecto debe ser solo la aplicación Rails (es decir, todo dentro del directorio de la aplicación Rails). El otro proyecto debe ser todo lo que esté fuera del directorio de la aplicación Rails.

  • Agregue el proyecto de la aplicación Rails como un submódulo git dentro del proyecto "contenedor".

  • Ahora puede agregar Heroku como control remoto en el repositorio de la aplicación Rails por separado y llevarlo a heroku. Heroku aceptará el push porque es solo una aplicación de Rails con los directorios y archivos esperados.

+0

Esto funcionó, gracias. – g33kz0r

0

yo añadiría todo por debajo /my_rails_app al repositorio git Heroku. A continuación, agregue GitHub como control remoto y agregue todo debajo de /project al repositorio de GitHub. Luego puede empujar la aplicación Rails a Heroku (desde /my_rails_app) y enviar el proyecto completo a GitHub (desde /project).

+0

Básicamente estás diciendo crear dos repositorios, ¿verdad? ¿Uno dentro del otro? Un bien sin embargo. Sin embargo, ya lo intenté, y no funciona :). Github es el problema: en lugar de mostrar my_rails_app como una carpeta controlada por versión normal, se muestra como un enlace a una referencia de confirmación de git (en este caso, los primeros caracteres de la identificación de confirmación del repositorio git my_rails_app). Básicamente, hacer esto hace que la vista web de github sea inútil para todos los efectos. – g33kz0r

+0

Tendrás que tener dos repos porque Heroku requiere el suyo. Lo hice con éxito con Heroku y GitHub, pero no anidado de esta manera. Parece que Justice podría tener una buena respuesta. –

4

Simplemente sobrescriba el archivo README predeterminado de Rails. No hay razón para mantenerlo. Coloque sus otras tareas relacionadas con la administración de proyectos en el directorio doc. Si bien ciertamente tiene razones válidas para querer configurarlo de la manera en que lo hizo, solo está creando un dolor de cabeza al ir contra la convención, y probablemente no valga la pena el beneficio.

6

Una solución para la situación Heroku (no el archivo README):

Si está utilizando los nuevos Heroku Cedar (creo que no estaba disponible cuando se preguntó por primera vez su pregunta) entonces sus procesos (como el proceso del servidor rails) arranque utilizando Foreman.Por lo tanto, se puede colocar un Procfile en el directorio github raíz que tiene el siguiente aspecto:

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 

A nivel local, también debe crear un archivo llamado .env (nota el. al principio), que contiene

PORT=3000 

Este archivo es leído por el capataz y se usa para establecer variables de entorno para que el puerto se establece cuando ejecuta foreman start en su máquina (desde el directorio root github, donde se encuentra el archivo Procfile). El servidor de Heroku se ocupa del archivo .env en tu banco de pruebas. La gran ventaja es que puede configurar múltiples procesos en el banco de pruebas de esa manera.

Cuestiones relacionadas