2012-02-03 9 views

Respuesta

23

Aquí hay una versión ajustada de la solución Pendlepants. Foreman busca un archivo .env para leer variables de entorno. En lugar de añadir una envoltura, que sólo puede haber conmutar capataz lo mando que utiliza para iniciar las cosas:

En .env:

WEB=node app.js 

En dev.env:

WEB=supervisor app.js 

En su Procfile:

web: $WEB 

Por defecto, capataz leerá de .env (en la producción), pero en la DEV basta con ejecutar esto:

foreman start -e dev.env 
+4

Esto no funcionó para mí en Heroku: nunca se cargó el archivo '.env'. Hizo un Procfile por separado, en su lugar: http://stackoverflow.com/questions/10560241/how-to-use- nodemon-with-env-files –

3

El problema no es tanto con Foreman como con la forma en que el nodo no recarga el código en las nuevas solicitudes. La solución es usar un paquete npm como supervisor junto con un contenedor de entorno para Foreman.

primer lugar, instale el supervisor:

npm install -g supervisor 

A continuación, escribir un script envoltorio que capataz puede llamar:

if [ "$NODE_ENV" == "production" ]; then 
    node /path/to/app.js 
else 
    supervisor /path/to/app.js 
fi 

Establecer permisos del guión envoltorio de ejecutables mediante la ejecución de chmod a+x /path/to/wrapper_script.sh

último , actualice el capataz para usar el script de envoltura. Así que en su Procfile:

web: /path/to/wrapper_script.sh 

Ahora cuando se ejecuta Foreman y su aplicación nodo no se está ejecutando en la producción, se debe recargar en cada petición.

7

Puede utilizar rerun para este fin

Es posible aplicar sólo 2 comandos para esto:

  1. joya instalar repetición
  2. capataz
  3. repetición se inicia

vuelva a ejecutar se reiniciará automáticamente procesar después de cualquier cambio en sus archivos.

+0

Esto no sería lento, totalmente reiniciar todo en el procfile en cada cambio de archivos? –

+0

Actualmente uso [supervisor] (https://github.com/isaacs/node-supervisor) para esto, no es realmente un gran problema reiniciar la aplicación en cada actualización de archivos. Es muy conveniente. –

2

Siento que el comentario de Peter Ehrlich sobre la pregunta original merece ser una respuesta por sí mismo. Creo que un archivo Procfile para local/dev es definitivamente la mejor solución: https://stackoverflow.com/a/10790514/133720

0

Ni siquiera necesita instalar nada nuevo si usa node-dev.

Tu.archivo env cargado desde Procfile:

NODECMD=node-dev 

Su Procfile:

web: $NODECMD app/server.js 

Su comando capataz

foreman start -e dev.env -p 9786 

Y en su env producción (heroku) establecer una variable de entorno:

NODECMD=node 
6

Si utilizar nodemon , puede hacerlo

nodemon --exec "foreman start" 
+0

Este método funciona bien para mí. –

+0

Intenté esto pero se atasca en "[nodemon] clean exit - esperando cambios antes de reiniciar", el servidor no se inicia de nuevo –

Cuestiones relacionadas