2013-10-24 59 views
5

我在Heroku上有幾個應用程序。他們都使用GruntJS來構建資產並部署到S3。一款應用程序在相當長一段時間內工作良好。process.env在Heroku中不包含配置變量

其他應用程序有一個問題,我無法從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並不是最好的想法,但它是我們設置的。當然如果需要的話可以改變。

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

回答

7

默認情況下,Heroku不會將配置變量暴露給構建階段。你想要這個,你就必須通過發出啓用user-env-compile實驗室:

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

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

+0

果然,它啓用了我的工作應用程序,我完全忘記了其他人的步驟。謝謝。 – ryanday

+0

:-)不客氣 –

+0

完全忘了。你搖滾。 –

0

2017更新:

它似乎應該使用ENV_DIR說法。

根據DOC:

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 
} 

對我來說,它似乎矯枉過正 - 高興聽到你的想法。