Tôi có một kịch bản Upstart cho máy chủ của tôi trông như thế này:Upstart env đoạn thơ không thiết lập các biến môi trường (như NODE_ENV) cho các ứng dụng Node.js
description "myapp node.js server"
start on runlevel [2345]
stop on shutdown
env NODE_ENV=production
env CUSTOM=somevalue
exec sudo -u nodejs /usr/local/bin/node /opt/myapp/app.js >> /var/log/nodejs/myapp.log 2>&1
post-start script
NODE_PID=`status myapp | egrep -oi '([0-9]+)$' | head -n1`
echo $NODE_PID > /var/run/nodejs/myapp.pid
end script
Tuy nhiên, các ứng dụng không thấy NODE_ENV thiết lập để sản xuất. Trong thực tế, nếu tôi console.log (process.env) trong ứng dụng, tôi không thấy NODE_ENV hoặc CUSTOM. Bất kỳ ý tưởng gì đang xảy ra?
Nhân tiện, NODE_ENV = nút sản xuất app.js hoạt động tốt.
Trả lời bởi Peter Lyons đi sâu và đưa ra một số gợi ý thực hành tốt nhất, nhưng chỉ cần chuyển từ "sudo -u" sang "su -c" mà không cần chạm vào bất cứ điều gì khác có vẻ như giải quyết vấn đề này nếu tôi chuyển sang sử dụng "www-data "người dùng so với người dùng" nodejs "của riêng tôi. Cái sau không hoạt động, nhưng điều đó không liên quan gì đến câu hỏi này. –
Tôi cũng nên đề cập rằng sudo -E (bảo vệ môi trường) có thể được thử, mặc dù tôi đã không thử nghiệm nó bản thân mình. –