2011-05-29 55 views
6

我想嘗試讓我的開發計算機儘可能靠近生產服務器(本例中爲heroku)。在Mac上設置ENV變量的Ruby設置

Heroku讓你定義配置變量ie。

config:add key=val 

這現在非常安全,因爲密鑰值不會存儲在我的代碼中。

您是否知道我的本地mac機器上每個應用程序如何以及在哪裏創建此類環境變量。

我已經使用了這個,並且還沒有找到一個好的解決方案。有任何想法嗎 ?

在此先感謝。

回答

8

謝謝Zabba,但我確實找到了一個很好的方式。

我正在使用POW來運行我的本地應用程序並閱讀文檔我已經發現您可以通過在我的應用程序的根中添加.powenv文件來設置Environment Vars。

export API_KEY='abcdef123456' 

然後你就可以在你的應用程序中使用,就像普通的ie。

api_key = ENV['API_KEY'] 

很酷的東西。

+0

好吧,你沒有提到你正在使用POW! – Zabba 2011-05-30 00:28:24

+0

是但確實這項工作控制檯和測試? – SpoBo 2012-07-05 13:54:05

3

這裏有一個辦法:

轉到http://railswizard.org/和只添加「EnvYAML」的模板。點擊完成,然後點擊生成的.rb文件。看看代碼如何使用文件config/env.yml來設置ENV變量。

這裏是它是如何做,這要歸功於http://railswizard.org/

在應用程序的目錄:

追加在config/application.rb

require 'env_yaml' 

創建一個名爲lib/env_yaml.rb文件:

require 'yaml' 
begin 
    env_yaml = YAML.load_file(File.dirname(__FILE__) + '/../config/env.yml') 
    if env_hash = env_yaml[ENV['RACK_ENV'] || ENV['RAILS_ENV'] || 'development'] 
    env_hash.each_pair do |k,v| 
     ENV[k] = v.to_s 
    end 
    end 
rescue StandardError => e 
end 

創建一個fi樂叫config/env.yml

defaults: &defaults 
    ENV_YAML: true 
    some_key: value 

development: 
    <<: *defaults 

test: 
    <<: *defaults 

production: 
    <<: *defaults 

注意,ENV不是Hash - 它只是似乎因爲使用[]如此。這就是爲什麼lib/env_yaml.rb中的一個each環路在ENV中設置爲config/env.yml中的每個值的值 - 因爲我們無法直接將Hash指定給ENV

+1

ENV背後的想法是瓦爾,你可以保持你的環境變量出你的代碼,他們是從神奇您的應用程序內提供給您。該解決方案提出了硬編碼它再次暴露你給大家看的設置。 – SpoBo 2012-07-05 13:53:14

0

將您的環境變量放在.env文件中,foreman將自動選取它們。

1

我沒有使用pow但是rvm和bash。我可以按照this Peachpit blog post的說明設置環境變量。

像其他的答案,我不得不添加像export TWILIO_ACCOUNT_SID="XXX"但我的〜/ .profile文件中的命令。

然後訪問的變量在我的代碼:

account_sid = ENV["TWILIO_ACCOUNT_SID"]