Puppet:设置env变量&启动应用程序 - 变量undefined

时间:2015-03-08 17:16:04

标签: linux environment-variables vagrant puppet

我正在使用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 sshecho $NODE_ENV,则返回development,但应用console.logs undefined

如果我杀死守护程序并重新启动应用程序,那么一切都再次变成了犹太人。

如何获取它,以便在提供时正确设置环境变量,并且当应用程序被守护时,它在启动时可以访问它们?

1 个答案:

答案 0 :(得分:1)

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

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

明确使用envrironment

编写一个执行

的包装器脚本
. /etc/environment

在调用npm之前。

通过清单

设置所需的变量

environment参数传递给exec,如下所示:

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

This answer可能是相关的。