Puis-je dire à foreman de recharger l'application web chaque fois qu'une demande est faite afin que je puisse développer décemment?

Une application web que j'écris en JavaScript en utilisant node.js. J'utilise Foreman, mais je ne veux pas redémarrer manuellement le serveur chaque fois que je change mon code. Puis-je dire à Foreman de recharger l'application Web entière avant de gérer une requête HTTP (c'est-à-dire redémarrer le processus node)?

21
demandé sur pdjota 2012-02-03 19:54:44

6 réponses

Voici une version ajustée de la solution Pendlepants. Contremaître à la recherche d'un .fichier env pour lire les variables d'environnement. Plutôt que d'ajouter un wrapper, vous pouvez simplement demander à Foreman de changer la commande utilisée pour démarrer les choses:

Dans .env:

WEB=node app.js

Dev.env:

WEB=supervisor app.js

Dans votre fichier Procfile:

web: $WEB

Par défaut, Foreman lira de .env (en Production), mais en DEV exécutez simplement ceci:

foreman start -e dev.env
23
répondu John David Anderson 2012-04-05 22:30:41

Vous pouvez utiliser réexécuter pour ce but

Vous pouvez implémenter seulement 2 commandes pour ceci:

  1. gem installer réexécuter
  2. relancer le début du contremaître

Ensuite, la réexécution redémarrera automatiquement le processus après tout changement dans vos fichiers.

7
répondu Igor Bobriakov 2012-10-28 19:13:24

Si vous utilisez nodemon , vous pouvez faire

nodemon --exec "foreman start"
6
répondu abel leroyer 2015-05-12 20:55:10

Le problème n'est pas tant avec Foreman que avec la façon dont node ne recharge pas le code sur les nouvelles requêtes. La solution consiste à utiliser un paquet npm comme supervisor avec un wrapper d'environnement pour Foreman.

Tout d'Abord, installez superviseur:

npm install -g supervisor

Ensuite, écrivez un script shell wrapper que Foreman peut appeler:

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

Définissez les autorisations du script wrapper sur exécutable en exécutant chmod a+x /path/to/wrapper_script.sh

Enfin, mettez foreman à jour pour utiliser le script wrapper. Donc, dans votre Procfile:

web: /path/to/wrapper_script.sh

Maintenant, lorsque vous exécutez Foreman et que votre application node ne fonctionne pas en production, elle doit être rechargée à chaque requête.

3
répondu Pendlepants 2012-11-06 15:56:17

J'ai l'impression que le commentaire de Peter Ehrlich sur la question initiale mérite d'être une réponse en soi. Je pense qu'un Procfile différent pour local / dev est certainement la meilleure solution: https://stackoverflow.com/a/10790514/133720

2
répondu Brade 2017-05-23 12:09:29

Vous n'avez même pas besoin d'installer quelque chose de nouveau si vous utilisez node-dev.

Votre .fichier env chargé depuis Procfile:

NODECMD=node-dev

Votre Procfile:

web: $NODECMD app/server.js

Votre commande de contremaître

foreman start -e dev.env -p 9786

Et dans votre environnement de production (heroku) définissez une variable d'environnement:

NODECMD=node
0
répondu ncabral 2014-10-28 00:29:59