node.js - run - npm yargs
Forever+Nodemon corriendo juntos (7)
¿Hay alguna forma de tener ambos paquetes funcionando juntos?
Entonces, básicamente, quiero tener lo mejor de ambos mundos. Ejecutando el servidor automáticamente (y reiniciando cuando hay un error) y también actualizaciones automáticas cuando hay un cambio de archivo .js.
Deberías ejecutar algo como esto
forever start -c nodemon app.coffee
Estoy usando forever-service . . .
Esto es lo que funcionó para mí. Hace lo siguiente: cada vez que se modifica un archivo json o raml en la carpeta de aplicaciones dist / assets, espere 10 segundos y luego reinicie la aplicación de nodo (script server.js):
$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH"
Entonces puedo ejecutar:
$ service raml start|stop|restart|status
También puedo hacer que el servicio se inicie en el reinicio del servidor con la utilidad chkconfig:
$ chkconfig --add raml
$ chkconfig raml on
Hay una entrada al respecto en las nodemon
frecuentes de nodemon
:
Si está utilizando nodemon forever (quizás en un entorno de producción), puede combinar los dos juntos. De esta forma, si el script se bloquea, siempre se reinicia el script, y si hay cambios de archivo, nodemon reinicia el script. Para más detalles, ver el número 30 .
Para lograr esto, debe agregar lo siguiente en la llamada para
forever
:
- Use forever
-c nodemon
option para decir para siempre que ejecutenodemon
lugar denode
.- Incluya la bandera nodemon
--exitcrash
para asegurarse de que nodemon finalice si la secuencia de comandos falla (o se cierra inesperadamente).- Dile para siempre que use
SIGTERM
lugar deSIGKILL
cuando solicite que nodemon se detenga. Esto garantiza que nodemon puede detener el proceso del nodo observado limpiamente.- Opcionalmente agregue el parámetro
--uid
, agregando un nombre único para su proceso. En el ejemplo, el uid está configurado parafoo
.
bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js
Para probar esto, puede matar el proceso server.js y lo reiniciará para siempre. Si
touch server.js
nodemon, lo reiniciará.Para detener el proceso controlado por forever y nodemon, simplemente llame al siguiente, utilizando el
uid
que le asignamos anteriormente (foo
):
bash forever stop foo
Esto detendrá tanto el nodo como el proceso del nodo que estaba monitoreando.
Tenga en cuenta que no recomendaría el uso de nodemon en un entorno de producción, pero eso se debe a que no me gustaría que se reinicie sin mis instrucciones explícitas.
No he encontrado una forma de que ambos paquetes se ejecuten juntos. Traté de hacer la técnica de @ toxa, pero cuando mi aplicación node.js lanzó una excepción, nodemon no la reiniciaría automáticamente, sino que emitiría un mensaje de error al registro de siempre:
nodemon] app crashed - waiting for file changes before starting...
Sin embargo, siempre tiene una opción -w
y el siguiente comando es efectivamente el mismo que si estoy ejecutando nodemon y para siempre:
forever start -w my-app.js
La desventaja de forever -w
versus nodemon
: forever
no tiene una opción de -delay, por lo que mi servidor se reinicia una vez por cada archivo que se cambia.
Prefiero un combo de lo que sugieren Toxa y Jubair.
forever start -c nodemon app.coffee --exitcrash
Si necesita pasar argumentos:
forever start -c "nodemon --harmony" app.js --exitcrash
Toxa estaba en el camino correcto, el problema planteado por cfogelberg es válido, pero para evitar ese problema, puede hacer lo siguiente:
forever -c "nodemon --exitcrash" app.js
esto asegura que realmente sale nodemon
(en lugar de darle el mensaje de "colisión de la aplicación") y luego lo recoge de nuevo para siempre.
In forever --help
this -c
especifica un comando para ejecutar, de lo contrario, predetermina el nodo. Sin -c da como resultado el error que se menciona en los comentarios a esta respuesta.