当前位置: 首页 > 面试题库 >

新贵环境节未为Node.js应用程序设置环境变量(如NODE_ENV)

沈飞舟
2023-03-14
问题内容

我的服务器上有一个Upstart脚本,如下所示:

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

但是,该应用程序看不到NODE_ENV设置为正式生产。实际上,如果我在应用程序中使用console.log(process.env),则看不到NODE_ENV或CUSTOM。有什么想法吗?

顺便说一下,NODE_ENV =生产节点app.js可以正常工作。


问题答案:

从sudo手册页(sudo的Ubuntu版本)

有两种不同的方法来处理环境变量。默认情况下,env_reset
sudoers选项处于启用状态。这将使命令在最小环境下执行,该环境包括TERM,PATH,HOME,SHELL,LOGNAME,USER和USERNAME,以及env_check和env_keep
sudoers选项允许的调用过程中的变量。实际上有一个环境变量白名单。

Sudo正在重置环境。这是在upstart或init脚本中使用su和的令人沮丧的方面sudo。新贵的最新版本支持通过以下setuid/setgid指令在不使用sudo的情况下指定uid
/ gid ,如下例所示。另请注意使用chdir

start on filesystem and started networking
respawn
chdir /var/www/yourapp
setuid yourapp
setgid yourapp
env NODE_ENV=production
env PATH=/usr/local/bin:/usr/bin:/bin
env CUSTOM=somevalue
exec /usr/local/bin/node app.js | /usr/bin/multilog s1024000 /var/log/yourapp 2>&1

对于新贵的新贵版本,这是我用来解决该问题的方法。

description "start and stop the example.com node.js server"

start on filesystem and started networking
respawn

chdir /path/to/your/code
exec su -c 'PATH=$PWD/node/bin NODE_ENV=$(cat node_env.txt) ./node/bin/node app/server.js' www-data  >> tmp/stdout.log 2>&1

请注意node_env.txt,因为我讨厌环境变量,所以我只是将文件放置到设置生产模式的应用程序根目录中
NODE_ENV=production如果愿意,您可以就在那儿。



 类似资料:
  • 问题内容: 我在运行show时有一个file.sh:未设置TERM环境变量。 问题答案: 您可以看到它是否真的没有 设置 。运行命令。 如果没有,则可以这样设置:

  • 谁能建议我如何在运行节点应用程序时在dockerfile中设置NODE_ENV变量。

  • 问题内容: 使用JetBrains的WebStorm官方Node插件(以及它们的其他IDE)运行Node.js应用程序时,是否可以设置环境变量? 问题答案: 不,从WebStorm不可能,应该在系统中定义环境变量。 更新:在新版本中,可以在“运行/调试”配置中设置环境变量。

  • ENV 设置环境变量 格式有两种: ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>... 这个指令很简单,就是设置环境变量而已,无论是后面的其它指令,如 RUN,还是运行时的应用,都可以直接使用这里定义的环境变量。 ENV VERSION=1.0 DEBUG=on \ NAME="Happy Feet" 这个例子中演示了如何换行,以

  • 问题内容: 我想通过运行程序时设置环境变量。这可能吗? 我试图这样设置: 但是结果消息说FOO不存在。 问题答案: 您必须传递一个包含键 env 的选项对象,该键 env 的值本身就是键值对的对象。

  • 问题内容: 我使用martini在Go中有一个GAE应用程序。我需要能够设置环境变量以告诉martini它应该使用生产设置进行初始化。根据Python文档,您可以在app.yaml中设置环境变量。我没有在Go docs中 看到任何有关此的内容,但我猜想它应该可以正常工作。 我需要能够将环境变量设置为,但是我只想在实际投入生产时(即)进行操作。有什么方法可以告诉您仅在非开发服务器上运行吗? 问题答案