Instancia de ensayo en Heroku


85

Me gustaría poder enviar código dev.myapp.compara probar y luego www.myapp.compara uso en producción. ¿Es esto posible con Heroku?

Respuestas:


142

Su interfaz con Heroku es esencialmente una rama de Git. La gema Heroku hace un trabajo a través de su API, pero dentro de su repositorio Git, es solo una nueva rama remota.

heroku create yourapp # production
git br -D heroku # delete the default branch

heroku create staging-yourapp # staging
git br -D heroku # delete the default branch

Una vez que haya configurado múltiples aplicaciones en Heroku, debería poder configurar su repositorio Git de esta manera:

git remote add staging git@heroku.com:staging-yourapp.git
git push origin staging

git remote add production git@heroku.com:yourapp.git
git push origin production

Normalmente trabajo en una rama "en funcionamiento" y uso Github como maestro.

Suponiendo que ese sea su caso, su flujo de trabajo de implementación probablemente se vería así:

git co -b working
# do some work

# push to github:
git co master
git merge working
git push

# push to staging:
git co staging
git merge master
git push origin staging

# push to production
git co production
git merge master
git push origin production

Gracias, esto tiene algo de sentido (soy una mierda). Pregunta: Suponga que estoy trabajando en algunos cambios de vanguardia en el "borde" de la rama. ¿Cómo puedo enviar esa rama a staging-myapp sin afectar a myapp (que actualmente se está ejecutando en la rama maestra)? ¿Tiene git push staging edge work?
— Tom Lehman

Con el interés de ponerte en marcha, simplemente fusiona el borde con tu rama de preparación y lo empuja. Su rama de producción está separada y limpia. Siempre puede bifurcarlo y realizar cambios que solo se fusionan allí.
— Luke Bayes

5
En lugar de crear aplicaciones con la rama remota predeterminada 'heroku' y después de eliminarla, puede usar una solución mucho más agradable como:heroku create yourapp --remote your-remote
— dombesz

2
Una vez que haya configurado esto, todos sus herokucomandos deben incluir --app stagingo --app production. ¿Hay alguna forma de establecer un valor predeterminado? (Preguntar como comentario porque esto parece demasiado específico para ser una pregunta SO completa.)
— Paul A Jungwirth

3
@PaulAJungwirth Para configurar una aplicación Heroku predeterminada, use algo como "git config heroku.remote staging". Más información en los documentos de Heroku en devcenter.heroku.com/articles/multiple-environments .
— Grifaton


10

Una parte clave de la pregunta original es vincular la aplicación de ensayo a un subdominio (dev.myapp.com) de la aplicación principal (www.myapp.com). Esto no se ha abordado en ninguna de las respuestas.

Paso 1: Configure las versiones de producción ('myapp') y de ensayo ('staging-myapp') de su aplicación como se indica en la respuesta de Luke Bayes

Paso 2: En su sistema de administración de dominio (por ejemplo, GoDaddy):

Create a CNAME record:  dev.myapp.com 
that points to:   proxy.heroku.com

Paso 3: Configure Heroku para enrutar dev.myapp.com a staging-myapp:

heroku domains:add dev.myapp.com --app staging-myapp

Una vez que el registro CNAME haya tenido tiempo de propagarse, podrá ejecutar su aplicación de ensayo en dev.myapp.com.


1
¿Qué tal el control de acceso para que no aparezca en Google, etc. y la gente no se tropiece con él y piense que es real? alguna buena solución?
— brittohalloran

Sí, la forma más fácil es omitir el paso de GoDaddy y acceder a la versión "dev" de su aplicación directamente desde el dominio de Heroku usando la URL de Heroku. (p . ej ., stormy-lake-5483.heroku.com. ) Sin embargo, si desea tener "dev" fuera de su dominio como se describe aquí, siempre puede instalar un archivo robots.txt para informar a google, bing, et. Alabama. para no indexar su sitio de desarrollo. Eso ayudará a mantenerlo fuera de los motores de búsqueda.
— Don Leatham

Terminé agregando un before_filtergancho a mi application_controllerpara atrapar TODO en la puesta en escena y forzar al usuario a iniciar sesión como administrador, luego configuré una cookie de administrador para poder ver la aplicación desde el punto de vista de un 'no administrador'. Trabajando bastante bien para mí.
— brittohalloran


7

Las cosas son más fáciles ahora. Así es como se hace ...

Crea una aplicación para cada entorno

$ heroku create myapp --remote production
$ heroku create myapp-staging --remote staging

Esto creará repositorios remotos con nombre para cada aplicación, que puede ver en .git/config.

Ahora puede usar los interruptores --app o --remote para apuntar a una aplicación en particular:

$ heroku info --app myapp-staging
$ heroku info --remote staging

Establecer entornos de Rails

Para las aplicaciones Rails, Heroku utiliza el entorno de "producción" de forma predeterminada . Si desea que su aplicación de prueba se ejecute en un entorno de prueba , cree el entorno en su proyecto y configure las variables de entorno RAILS_ENV y RAKE_ENV correspondientes en la aplicación:

$ heroku config:set RACK_ENV=staging RAILS_ENV=staging --remote staging

Configurar entornos

Si tiene otras variables de configuración, deberá pasarlas también para cada entorno.

$ heroku config:set AWS_KEY=abc --remote staging
$ heroku config:set AWD_SECRET=123 --remote staging
...etc

Sin embargo, eso es un gran dolor, así que solo uso mi gema snappconfig y ejecuto

$ rake heroku:config:load[myapp-staging]

para cargar los archivos de configuración YAML de mi proyecto en Heroku.

Desplegar

Ahora simplemente empuja a Heroku de esta manera:

$ git push staging master
$ git push production master

y migrar así:

$ heroku run rake db:migrate --remote staging
$ heroku run rake db:migrate --remote production

(Consulte Gestión de varios entornos para una aplicación | Centro de desarrollo de Heroku para obtener más información y accesos directos).


Heroku desaconseja configurar RAILS_ENVy RACK_ENVto staging: "Puede ser tentador crear otro entorno personalizado como" staging "y crear un config / environment / staging.rb e implementarlo en una aplicación Heroku con RAILS_ENV = staging. Esta no es una buena práctica . En su lugar, recomendamos ejecutar siempre en modo de producción y modificar cualquier comportamiento estableciendo sus variables de configuración ". Más sobre esto aquí: devcenter.heroku.com/articles/…
— Koen.

@ Koen- Tratar de administrar configuraciones complejas de Rails sin el contexto de los entornos es totalmente impráctico en mi experiencia, ya sea en Heroku o de otra manera. Si tiene un conjunto completo de cadenas de conexión, claves de API, etc. para su aplicación de ensayo y otro para su aplicación de producción, ¿realmente va a establecer esas variables de configuración individualmente para cada una? Eso es solo buscar problemas, Heroku está dando un mal consejo aquí.
— Yarin

Gracias. Estoy buscando una puesta en escena que realmente obtenga una URL real, probablemente con commithash. Creo que esto es algo que Zeit Now o Netlify facilitaron.
— Encuesta
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.