linux - Puppet:设置环境变量和启动应用程序 - 变量未定义

标签 linux environment-variables vagrant puppet

我正在使用 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 sshecho $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/

相关文章:

vagrant - Vagrant 在哪里保存对虚拟机的更改?

linux - rsync ssh 递归试运行错误/服务器上没有 rsync

c++ - 将值作为函数参数传递还是计算两次?

linux - 链接到 libcurl 时 _end 符号消失

node.js - 在 npm 脚本中设置环境变量*带空格*的跨平台方法

vagrant - ionic-box vagrant box - 安装 Android 目标 : "android-22"

python - Django ssh 在 sftp 连接期间失败

python-2.7 - 使用 Python boto3 设置或修改 AWS Lambda 环境变量

symfony - 用作 Symfony 参数的非标量 ENV

Vagrant:ansible 供应商的多个剧本