Puppet:设置环境变量和启动应用程序 - 变量未定义
Puppet: Set env variables & boot app - variables undefined
我正在使用 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']
}
}
环境 class 设置的一个变量是 NODE_ENV
开发。
如果我vagrant ssh
和echo $NODE_ENV
返回development
,但是申请console.logs
undefined
.
如果我终止守护进程并重新启动应用程序,一切都会恢复正常。
我怎样才能得到它,以便在提供时正确设置环境变量,并且当应用程序被守护进程时,它可以在启动时访问它们?
运行您的 exec
的 shell 似乎不尊重 /etc/environment
。
有两种方法可以解决这个问题。
明确使用环境
编写一个包装器脚本来执行
. /etc/environment
在调用 npm
属性之前。
通过清单设置所需的变量
像这样将 environment
参数传递给 exec
:
exec { 'Daemonize API':
environment => [ 'NODE_ENV=development, ],
...
}
可能相关。
我正在使用 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']
}
}
环境 class 设置的一个变量是 NODE_ENV
开发。
如果我vagrant ssh
和echo $NODE_ENV
返回development
,但是申请console.logs
undefined
.
如果我终止守护进程并重新启动应用程序,一切都会恢复正常。
我怎样才能得到它,以便在提供时正确设置环境变量,并且当应用程序被守护进程时,它可以在启动时访问它们?
运行您的 exec
的 shell 似乎不尊重 /etc/environment
。
有两种方法可以解决这个问题。
明确使用环境
编写一个包装器脚本来执行
. /etc/environment
在调用 npm
属性之前。
通过清单设置所需的变量
像这样将 environment
参数传递给 exec
:
exec { 'Daemonize API':
environment => [ 'NODE_ENV=development, ],
...
}