【问题标题】:process.env does not contain config variables on Herokuprocess.env 不包含 Heroku 上的配置变量
【发布时间】:2013-11-03 09:42:14
【问题描述】:

我在 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 并不是最好的主意,但这是我们设置的。当然,如果需要,这可能会改变。

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

【问题讨论】:

    标签: node.js heroku gruntjs


    【解决方案1】:

    Heroku 默认不向 build 阶段公开配置变量。如果你想要这个,你必须通过发出以下命令来启用user-env-compile 实验室:

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

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

    【讨论】:

    • 果然,它已在我的工作应用程序中启用,我完全忘记了其他步骤。谢谢。
    • 完全忘记了。你摇滚。
    • 这个“构建阶段”是什么?在生产中使用 user-env-compile 是一种好习惯吗?
    【解决方案2】:

    2017 年更新:

    看来您应该使用 ENV_DIR 参数。

    根据文档:

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

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

    这是在构建阶段提取配置变量的 sn-p:

    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
    }
    

    对我来说,这似乎有点过头了——很高兴听到你的想法。

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 2014-04-20
      • 2020-01-05
      • 2020-09-30
      • 2017-08-03
      • 2016-02-29
      • 2011-10-31
      • 1970-01-01
      • 2019-02-05
      相关资源
      最近更新 更多