Node.js process.env不包含Heroku上的配置变量
我在Heroku上有一些应用程序。它们都使用GruntJS构建资产并部署到S3。一款应用程序已经运行了很长一段时间 其他应用程序有一个问题,我无法从GrunFile读取配置变量。当我使用Heroku的工具带查看我的设置时,我看到:Node.js process.env不包含Heroku上的配置变量,node.js,heroku,gruntjs,Node.js,Heroku,Gruntjs,我在Heroku上有一些应用程序。它们都使用GruntJS构建资产并部署到S3。一款应用程序已经运行了很长一段时间 其他应用程序有一个问题,我无法从GrunFile读取配置变量。当我使用Heroku的工具带查看我的设置时,我看到: $ heroku config --app mydevapp --account personal === mydevapp Config Vars AWS_ACCESS_KEY: ######### AWS_BUCKET:
$ 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获得。当我从GrunFile中选择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'
}
那里还有一些其他的VAR,但我不确定什么是安全的。我没有看到列出任何配置变量
我不知道我的工作应用程序和process.env变量中没有配置变量的两个应用程序之间有什么区别
我已经读到以这种方式使用Grunt并不是最好的主意,但这是我们已经设置的。当然,如果需要的话,这可能会改变
有什么想法吗?有什么需要澄清的吗?默认情况下,Heroku不会将配置变量公开给构建阶段。如果需要,您必须通过发出以下命令来启用
user env compile
lab:
heroku labs:enable user-env-compile -a myapp
文件:2017年更新:
似乎您应该使用ENV_DIR参数
根据文件:
ENV_DIR是一个目录,其中包含每个
应用程序的配置变量。配置变量可用
在执行中指定的命令期间作为环境变量
Procfile,以及运行一次性进程时
查看该部分以了解更多详细信息
以下是在构建阶段提取配置变量的代码段:
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
}
对我来说,这似乎有点过头了——很高兴听到你的想法。果然,它在我的工作应用程序中启用了,而我在其他应用程序中完全忘记了这一步。谢谢,我完全忘了。你太棒了。这个“建造阶段”是什么?在生产中使用用户env compile是否是一种良好的实践?