node.js - solicitud - modelo de carta para solicitar colaboracion
¿Puedo decirle a Foreman que vuelva a cargar la aplicación web cada vez que se realice una solicitud para poder desarrollar decentemente? (6)
Aquí hay una versión ajustada de la solución Pendlepants. Foreman busca un archivo .env para leer las variables de entorno. En lugar de agregar una envoltura, puede hacer que Foreman cambie el comando que utiliza para iniciar las cosas:
En .env:
WEB=node app.js
En dev.env:
WEB=supervisor app.js
En su Procfile:
web: $WEB
De forma predeterminada, Foreman leerá desde .env (en producción), pero en DEV solo ejecuta esto:
foreman start -e dev.env
Una aplicación web que estoy escribiendo en JavaScript usando node.js. Utilizo Foreman, pero no quiero reiniciar manualmente el servidor cada vez que cambio mi código. ¿Puedo decirle a Foreman que vuelva a cargar la aplicación web completa antes de manejar una solicitud HTTP (es decir, reiniciar el proceso del node
)?
El problema no está tanto en Foreman como en cómo el nodo no recarga el código en nuevas solicitudes. La solución es utilizar un paquete npm como supervisor junto con un contenedor de entorno para Foreman.
Primero, instale el supervisor:
npm install -g supervisor
Luego, escribe un script de shell envoltorio al que Foreman pueda llamar:
if [ "$NODE_ENV" == "production" ]; then
node /path/to/app.js
else
supervisor /path/to/app.js
fi
Establezca los permisos del script contenedor en ejecutable ejecutando chmod a+x /path/to/wrapper_script.sh
Por último, actualizar foreman para utilizar el script de envoltura. Así que en tu Procfile
:
web: /path/to/wrapper_script.sh
Ahora, cuando ejecuta Foreman y su aplicación de nodo no se está ejecutando en producción, debería recargarse en cada solicitud.
Ni siquiera necesita instalar nada nuevo si usa node-dev.
Su archivo .env cargado desde Procfile:
NODECMD=node-dev
Su Procfile:
web: $NODECMD app/server.js
El mando de tu capataz
foreman start -e dev.env -p 9786
Y en tu producción env (heroku) establece una variable de entorno:
NODECMD=node
Puedes usar la rerun para este propósito
Podrías implementar solo 2 comandos para esto:
- gema instalar rerun
- volver a ejecutar foreman start
Luego, la ejecución se reiniciará automáticamente después de cualquier cambio en sus archivos.
Si usas nodemon , puedes hacerlo.
nodemon --exec "foreman start"
Siento que el comentario de Peter Ehrlich sobre la pregunta original merece ser una respuesta por sí solo. Creo que un Procfile diferente para local / dev es definitivamente la mejor solución: https://.com/a/10790514/133720