process.env在Heroku上不包含配置变量

时间:2013-10-24 15:24:33

标签: node.js heroku gruntjs

我在Heroku上有一些应用程序。所有这些都使用GruntJS来构建资产并部署到S3。一个应用程序已经工作了很长时间。

其他应用程序有一个问题,我无法从Gruntfile读取我的配置变量。当我使用Heroku的工具带查看我的设置时,我看到:

$ heroku config --app mydevapp --account personal
=== mydevapp Config Vars
AWS_ACCESS_KEY:         #########     
AWS_BUCKET:             #########
AWS_SECRET_KEY:         #########
BUILDPACK_URL:          https://github.com/ddollar/heroku-buildpack-multi.git
DATABASE_URL:           #########
PAPERTRAIL_API_TOKEN:   #########
TEST:                   test

哪个好。但是Grunt没有这些变量可供我使用。当我从Gruntfile中调用console.log(process.env)时,我看到:

{ GEM_HOME: '/tmp/build_e26d1d60-d447-40d8-b09b-02d3758a6027/.gem/ruby/1.9.1',
  SHELL: '/bin/bash',
  SSH_CLIENT: '10.207.46.127 55868 50678',
  GROUP: 'production',
  DEPLOY: 'production',
  STACK: 'cedar',
  SHLVL: '3',
  HOME: '/app',
  CPPPATH: '/tmp/node-node-hP8q/include',
  _: '/tmp/build_e26d1d60-d447-40d8-b09b-02d3758a6027/node_modules/grunt-cli/bin/grunt' 
}

那里还有一些其他的变种,但我不确定什么是安全的。我没有看到列出的任何配置变量。

我不知道我的工作应用与process.env变量中没有配置变量的两个应用之间有什么区别。

我已经读到以这种方式使用Grunt并不是最好的主意,但这是我们设置的。当然,如果需要,这可能会改变。

有什么想法吗?有什么我需要澄清的吗?

2 个答案:

答案 0 :(得分:7)

默认情况下,Heroku不会将配置变量公开给 build 阶段。你想要这个,你必须通过发出:{/ p>启用user-env-compile实验室

heroku labs:enable user-env-compile -a myapp

文档:https://devcenter.heroku.com/articles/labs-user-env-compile

答案 1 :(得分:1)

2017年更新:

它似乎应该使用ENV_DIR参数。

根据文件:

  

ENV_DIR是一个包含每个文件的目录   应用程序的配置变量。配置变量可用   在执行指定的命令期间作为环境变量   Procfile,以及运行一次性流程时。

查看bin/compile部分了解更多详情

以下是在构建阶段提取配置变量的代码段:

export_env_dir() {
  env_dir=$1
  whitelist_regex=${2:-''}
  blacklist_regex=${3:-'^(PATH|GIT_DIR|CPATH|CPPATH|LD_PRELOAD|LIBRARY_PATH)$'}
  if [ -d "$env_dir" ]; then
    for e in $(ls $env_dir); do
      echo "$e" | grep -E "$whitelist_regex" | grep -qvE "$blacklist_regex" &&
      export "$e=$(cat $env_dir/$e)"
      :
    done
  fi
}

对我而言,这听起来有点矫枉过正 - 很高兴听到你的想法。