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 sshecho $NODE_ENV返回development,但是申请console.logsundefined.

如果我终止守护进程并重新启动应用程序,一切都会恢复正常。

我怎样才能得到它,以便在提供时正确设置环境变量,并且当应用程序被守护进程时,它可以在启动时访问它们?

运行您的 exec 的 shell 似乎不尊重 /etc/environment

有两种方法可以解决这个问题。

明确使用环境

编写一个包装器脚本来执行

. /etc/environment

在调用 npm 属性之前。

通过清单设置所需的变量

像这样将 environment 参数传递给 exec

exec { 'Daemonize API':
    environment => [ 'NODE_ENV=development, ],
    ...
}

可能相关。