我在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并不是最好的主意,但这是我们设置的。当然,如果需要,这可能会改变。
有什么想法吗?有什么我需要澄清的吗?
答案 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
}
对我而言,这听起来有点矫枉过正 - 很高兴听到你的想法。