我正在使用Puppet配置我的Vagrant盒子。在其他一些任务中,main.pp
文件正在创建/etc/environments
文件,然后守护我正在运行的node.js应用程序。节点应用程序需要一些环境变量,但它们会返回undefined。
相关的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
undefined
。
如果我杀死守护程序并重新启动应用程序,那么一切都再次变成了犹太人。
如何获取它,以便在提供时正确设置环境变量,并且当应用程序被守护时,它在启动时可以访问它们?
答案 0 :(得分:1)
运行exec
的shell似乎不尊重/etc/environment
。
有两种方法可以解决这个问题。
编写一个执行
的包装器脚本. /etc/environment
在调用npm
之前。
将environment
参数传递给exec
,如下所示:
exec { 'Daemonize API':
environment => [ 'NODE_ENV=development, ],
...
}
This answer可能是相关的。