Existe-t-il un moyen de faire fonctionner ces deux packages ensemble?
Donc, fondamentalement, je veux avoir le meilleur des deux mondes. Exécution automatique du serveur (et redémarrage en cas d'erreur) et mises à jour automatiques en cas de modification du fichier .js.
Toxa était sur la bonne voie, le problème que cfogelberg soulevé est valide, mais pour éviter ce problème, vous pouvez faire ce qui suit:
forever -c "nodemon --exitcrash" app.js
cela permet de s'assurer que nodemon
se ferme réellement (plutôt que de vous donner le message "application plantée"), puis forever
le reprend.
Dans forever --help
cette -c
spécifie une commande à exécuter, sinon elle utilise par défaut le nœud. Sans -c résulte l'erreur qui est mentionnée dans les commentaires de cette réponse.
Vous devriez exécuter quelque chose comme ça
forever start -c nodemon app.coffee
Il y a une entrée à ce sujet dans la nodemon
FAQ :
Si vous utilisez nodemon avec pour toujours (peut-être dans un environnement de production), vous pouvez combiner les deux ensemble. De cette façon, si le script se bloque, redémarre définitivement le script et s'il y a des modifications de fichier, nodemon redémarre votre script. Pour plus de détails, voir numéro .
Pour ce faire, vous devez ajouter les éléments suivants lors de l'appel à
forever
:
- Utilisez pour toujours
-c nodemon
option pour indiquer pour toujours d'exécuternodemon
au lieu denode
.- Inclure le nodemon
--exitcrash
flag pour s'assurer que nodemon se ferme si le script plante (ou se ferme de façon inattendue).- Indiquez pour toujours d'utiliser
SIGTERM
au lieu deSIGKILL
lorsque vous demandez à nodemon de s'arrêter. Cela garantit que nodemon peut arrêter proprement le processus de nœud surveillé.- Ajoutez éventuellement le
--uid
paramètre, en ajoutant un nom unique pour votre processus. Dans l'exemple, l'uid est défini surfoo
.
bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js
Pour tester cela, vous pouvez tuer le processus server.js et le redémarrer pour toujours. Si vous
touch server.js
nodemon le redémarrera.Pour arrêter le processus surveillé par forever et nodemon, il suffit d'appeler ce qui suit, en utilisant le
uid
que nous avons attribué ci-dessus (foo
):
bash forever stop foo
Cela arrêtera à la fois nodemon et le processus de noeud qu'il surveillait.
Notez que je ne recommanderais pas d'utiliser nodemon dans un environnement de production - mais c'est parce que je ne voudrais pas qu'il redémarre sans mes instructions explicites.
Je n'ai pas trouvé de moyen de faire fonctionner les deux packages ensemble. J'ai essayé de faire la technique de @ toxa, mais lorsque mon application node.js lançait un nodemon d'exception, il ne le redémarrait pas automatiquement, produisant à la place un message d'erreur dans le journal permanent:
nodemon] app crashed - waiting for file changes before starting...
Cependant, a toujours un -w
option et la commande suivante est en fait la même chose que si j'exécute nodemon et pour toujours ensemble:
forever start -w my-app.js
L'inconvénient de forever -w
versus nodemon
: forever
n'a pas d'option --delay, donc mon serveur est redémarré une fois pour chaque fichier modifié.
Je préfère un combo de ce que Toxa et Jubair suggèrent.
forever start -c nodemon app.coffee --exitcrash
Si vous devez passer des arguments:
forever start -c "nodemon --harmony" app.js --exitcrash
J'utilise forever-service . . .
C'est ce qui a fonctionné pour moi. Il fait ce qui suit: chaque fois qu'un fichier json ou raml dans le dossier applications dist/assets est modifié, attendez 10 secondes, puis redémarrez l'application de nœud (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"
Ensuite, je peux exécuter:
$ service raml start|stop|restart|status
Je peux également faire démarrer le service au redémarrage du serveur avec l'utilitaire chkconfig:
$ chkconfig --add raml
$ chkconfig raml on