J'utilise pm2 pour démarrer mon application mais je ne peux pas lui transmettre d'argument. la commande que j'utilise est pm2 start app.js - dev. Bien que cela fonctionne avec pour toujours.
Vous pouvez faire ce qui est indiqué dans ce ticket: https://github.com/Unitech/pm2/issues/1
Toutefois, si vous dépassez l'environnement, vous voudrez peut-être utiliser les variables d'environnement. Avec cela, vous créez une variable accessible par tout processus de cet environnement avec process.env.*
.
Donc vous avez un fichier de configuration config.json
:
{
"dev": {
"db": {
"hosts":["localhost"],
"database": "api"
},
"redis": {
"hosts": ["localhost"]
}
},
"staging": {
"db": {
"hosts":["1.1.1.1"],
"database": "api"
},
"redis": {
"hosts": ["2.2.2.2"]
}
},
"production": {
"db": {
"hosts":["1.1.1.1", "1.1.1.2", "1.1.1.3"],
"database": "api"
},
"redis": {
"hosts": ["2.2.2.2", "2.2.2.3"]
}
}
}
Ensuite, vous importez votre configuration:
var config=require('./config.json')[process.env.NODE_ENV || 'dev'];
db.connect(config.db.hosts, config.db.database);
Ensuite, vous définissez la variable dans votre environnement via Shell:
export NODE_ENV=staging
pm2 start app.js
La variable d'environnement durera aussi longtemps que votre session. Vous devrez donc le définir dans le ~/.bashrc
fichier pour cet utilisateur que la variable doit conserver. Cela définira la variable à chaque session.
PM2 a un deploy system qui vous permet de définir une variable d'environnement chaque fois avant que votre application ne soit démonisée. C'est ainsi que les démons des systèmes POSIX acceptent généralement les paramètres, car ils ne sont pas perdus avec le processus. Compte tenu de votre situation, cela n’aura peut-être pas beaucoup d’importance, mais c’est une bonne pratique.
De plus, vous devez envisager d’arrêter/de démarrer localement et de redémarrer (si vous êtes en mode cluster) chaque fois que cela est possible pour éviter les temps morts en production.
Si vous voulez passer les arguments de noeud de la CLI, alors
pm2 start myServer.js --node-args="--production --port=1337"
.
Edité
vous pouvez ajouter des arguments après --
pm2 start app.js -- --prod
Documents de voiles pour deploymemt .
Il est possible de définir des arguments avec le processus.
Vous pouvez définir un nouveau processus dans ecosystem.config.js
avec une clé args
, comme ceci:
{
name : 'my-service',
script : './src/service.js',
args : 'firstArg secondArg',
},
{
name : 'my-service-alternate',
script : './src/service.js',
args : 'altFirstArg altSecondArg',
}
Ici, les deux processus utilisent le même fichier (service.js
), mais transmettez-lui des arguments différents.
Notez que ces arguments sont gérés dans service.js
. Dans mon cas, je viens d'utiliser process.argv[2]
pour obtenir le premier argument, et ainsi de suite.
Vous pouvez envoyer des arguments à votre script en les passant après --
. Par exemple: pm2 start app.js -i max -- -a 23 // Pass arguments after -- to app.js
Eh bien, vous pouvez faire passer les paramètres de pm2 à nodejs dans CLI de deux manières différentes:
Dans les deux cas, vous constaterez que ces valeurs existent dans process.argv
(['dev', '- port = 1234'])
À partir de la pm2 docs
//Inject what is declared in env_production
$ pm2 start app.js --env production
//Inject what is declared in env_staging
$ pm2 restart app.js --env staging