setting NODE_ENV for node.js + expressjs applicati

2020-05-14 08:13发布

问题:

i got the daemon working alright with these instructions: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/

but because this starts the application in DEVELOPMENT mode, the log file gets spammed with socket.io debug logs.

i tried setting the NODE_ENV to production in the upstart-conf-file but had no success.

script
    export HOME="/root"
    export NODE_ENV=production

    exec /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1
end script

didn't work.

回答1:

Try

exec NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1

In my setup I'm sudoing as a lesser user, so it's

exec sudo -u some-user NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1

and since it's spawning off another user it probably has another environment. I'm a newbie here, but it works for me.



回答2:

Here's a simpler upstart script you can use. Upstart now supports everything you need to do directly without script sections or too much embedded shell syntax. This includes environment variables (env), working directory (chdir), user/group (setuid, setgid), log handling (console log), etc. Your log files will be handled and rotated into /var/log/upstart/your_app.log

description "start and stop the example express.js/node.js server"
author "John Doe <jd@example.com>"

start on filesystem and started networking
respawn
console log
chdir /opt/your_app
setuid your_app_user
setgid your_app_user
env PATH=./node_modules/.bin:./node/bin:/usr/bin
env NODE_ENV=production
exec app/server.js


回答3:

If you are using node.js in production, I recommend you use forever.js to daemonize your program https://github.com/nodejitsu/forever

Install using npm: [sudo] npm install forever -g

export NODE_ENV=production and run forever start app.js You can also specify where to put error and stdout logs.



回答4:

to set NODE_ENV in heroku use:

heroku config:set NODE_ENV="production"


回答5:

Ubuntu/Upstart are listed in the question, but I got here while looking for answers for a FreeBSD/system shell daemon.

The line below started the app in "development" environment:

exec node path/to/start/script.js

The line below started the app in "production" environment:

NODE_ENV=production exec node path/to/start/script.js

It took me a while to figure this out, so I thought I'd share.