我正在使用 Puppet 来配置我的 Vagrant 盒子。在一些其他任务中,main.pp
文件正在创建 /etc/environments
文件,然后守护我正在运行的 node.js 应用程序。节点应用程序需要一些环境变量,但它们返回未定义。
相关的 main.pp
片段:
class environment {
file { "/etc/environment":
ensure => present,
source => 'puppet:///modules/environment/dev.env'
}
}
class application {
exec { "Daemonize API" :
cwd => "/vagrant/api",
command => "npm run watch",
onlyif => ["test -d /vagrant/api/node_modules"],
path => ["/bin", "/usr/bin"],
require => Package['nodejs']
}
}
环境类设置的一个变量特别是 NODE_ENV
到开发。
如果我vagrant ssh
和echo $NODE_ENV
,返回development
,但是应用console.logs
未定义
。
如果我终止守护进程并重新启动应用程序,一切都会再次变得洁净。
我怎样才能得到它,以便在提供时正确设置环境变量,并且当应用程序被守护进程时,它可以在启动时访问它们?
最佳答案
运行您的 exec
的 shell 似乎不支持 /etc/environment
。
有两种方法可以解决这个问题。
明确使用环境
写一个封装脚本来做一个
. /etc/environment
在正确调用 npm
之前。
通过 list 设置所需的变量
将 environment
参数传递给 exec
,如下所示:
exec { 'Daemonize API':
environment => [ 'NODE_ENV=development, ],
...
}
This answer可能是相关的。
关于linux - Puppet:设置环境变量和启动应用程序 - 变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929438/