web-dev-qa-db-fra.com

Comment puis-je vérifier si mon application pm2 NODE_ENV est configurée?

Je viens donc de déployer un site avec nœud et pm2 pour la première fois et je reviens en arrière et je fais quelques optimisations et je lis les meilleures pratiques, etc.

J'ai lu que vous pouvez obtenir de nombreux avantages en définissant NODE_ENV=production.

J'ai trouvé cela dans les documents pm2:

[process.json]
"env_production" : {
  "NODE_ENV": "production"
}

...

$ pm2 start process.json --env production

Donc je l'ai fait mais je n'ai aucune idée si ça marche. En essayant de comprendre comment le vérifier, j'ai appris à essayer:

$ node
> process.env.NODE_ENV
> undefined

Donc, ce n'est pas un bon signe ... mais, avec ma compréhension limitée du fonctionnement des trucs de bas niveau, je peux deviner que peut-être pm2 lance chaque application en tant que processus de nœud séparé? Alors peut-être que je ne suis pas dans le bon processus quand j'essaye de le vérifier.

De plus, je ne sais pas si je dois créer un nouveau fichier ~/.pm2/dump.pm2 parce que peut-être à chaque fois que cela remplace les options que j'ai définies? (parce que j'ai utilisé pm2 startup).

Comment vérifier si le NODE_ENV de mon application pm2 est défini?

13
Kenmore

Pour répondre à la question réelle dans le titre:

Dans votre script, pour moi, mon application Express app.js fichier, vous pouvez utiliser process.env.NODE_ENV pour obtenir la valeur actuelle de NODE_ENV et déconnectez-vous si vous le souhaitez.

Une méthode encore meilleure consiste à utiliser le module Process Metrics de PM2, alias pmx.

yarn add pmx

ou

npm install pmx --save

puis

const Probe = require('pmx').probe()

Probe.metric({
  name    : 'NODE_ENV',
  value   : function() {
    return process.env.NODE_ENV
  }
})

Maintenant, il apparaîtra dans les appels à pm2 monit (en bas à gauche).


Pour changer votre environnement:

Il est nécessaire de tuer et de redémarrer le processus pour changer votre environnement.

$ pm2 kill && pm2 start pm2.json --env production

Ce qui suit n'est pas assez bon:

pm2 restart pm2.json --env production
21
Kenmore

Commencez par npm en l'ajoutant à votre package.json:

"scripts": {
  "myScript": "NODE_ENV=production pm2 start server.js"
}

Ensuite

npm start myScript

Vous pouvez aussi le faire directement, mais c'est facile à gérer, automatisez avec crontab et c'est dans votre contrôle de source ...

5
malix

Votre fichier process.json est incomplet. Essayez d'utiliser quelque chose comme ceci:

[process.json]
{
  "name" : "MyApp",
  "script" : "myapp.js",
  "env_production" : {
    "NODE_ENV": "production"
  }
}

Ajoutez ensuite la connexion à votre code, de préférence quelque part au démarrage:

console.log("NODE_ENV : ", process.env.NODE_ENV);

Maintenant, lancez l'application:

pm2 start process.json --env production

Regardez enfin les journaux des applications:

pm2 logs MyApp

Cela devrait le faire.

5
Roman Stetsyshin

Peut-être qu'au début de votre script de serveur, vous pouvez imprimer la valeur de la variable d'environnement, puis vérifier les journaux PM2. Utilisez le code suivant pour imprimer la valeur de votre variable d'environnement:

console.log('process.env.NODE_ENV:', process.env.NODE_ENV);

Et puis utilisez le code suivant pour voir les journaux PM2

pm2 logs nom_app

Ici app_name est le nom de votre processus, comme indiqué par l'entrée dans le process.json fichier.

3
yeiniel