process.env在Heroku上不包含configurationvariables

Heroku上有几个应用程序。 他们都使用GruntJS来构build资产并部署到S3。 一个应用程序已经工作很长时间了。

其他应用程序有一个问题,我无法从Gruntfile读取我的configurationvariables。 当我使用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 

这是伟大的。 然而,这些variables都没有从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' } 

那里有一些其他的变数,但我不确定什么是安全的显示。 我没有看到列出的任何configurationvariables。

我不知道我的工作应用程序和process.envvariables中没有configurationvariables的两个应用程序之间有什么不同。

我读过以这种方式使用Grunt并不是最好的想法,但这是我们设置的。 当然,如果需要的话可以改变。

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

Heroku默认不会将configurationvariables暴露给构build阶段。 你需要这个,你必须发出以下命令来启用user-env-compile实验:

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

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

2017更新:

它似乎你应该使用ENV_DIR参数。

根据doc:

ENV_DIR是一个包含每个应用程序configurationvariables的文件的目录。 configurationvariables在执行Procfile中指定的命令期间以及运行一次性进程时可用作环境variables。

检查bin / compile部分以获取更多细节

这是一个在构build阶段提取configurationvariables的代码片段:

 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 } 

对我来说,这似乎是一个矫枉过正的事情 – 很高兴听到你的想法。