How can I check if my pm2 app NODE_ENV is getting set?

Kenmore picture Kenmore · Jun 23, 2016 · Viewed 38k times · Source

So I just deployed a site with node and pm2 for the first time and I'm going back and doing some optimization and reading best practices, etc.

I read that you can get a lot of benefit by setting NODE_ENV=production.

I found this in the pm2 docs:

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

...

$ pm2 start process.json --env production

So, I did it but I have no idea if it is working. While trying to figure out how to check it I learned to try:

$ node
> process.env.NODE_ENV
> undefined

So, that's not a good sign.. but, with my limited understanding of how the low level stuff works, I can guess that maybe pm2 launches each app as a separate node process? So maybe I'm not in the right process when I try to check it.

Also, I don't know if I have to make a new ~/.pm2/dump.pm2 file because maybe whenever that is maybe overriding the options I set? (because I used pm2 startup).

How do I check if my pm2 app's NODE_ENV is set?

Answer

Kenmore picture Kenmore · Jun 24, 2016

To answer the actual question in the title:

Within your script, for me my Express app's app.js file, you can use process.env.NODE_ENV to get the current value of NODE_ENV and log that out if you want.

An even better way is to use PM2's Process Metrics module, aka pmx.

yarn add pmx

or

npm install pmx --save

then

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

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

Now it will show up in calls to pm2 monit (bottom left).


To change your environment:

It is necessary that you kill and restart the process to change your environment.

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

The following isn't good enough:

pm2 restart pm2.json --env production