在Rails 3中设置环境variables(Devise + Omniauth)
我一直在试图弄清楚Ryan Bates在他的Facebook身份validation屏幕截图中如何设置下面的“FACEBOOK_APP_ID”和“FACEBOOK_SECRET”环境variables。
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET'] 还有类似的问题,但没有答案,我已经能够在Rails 3.2.1上工作。
更新:
截至2013年5月,我最喜欢处理ENVvariables的方法是通过Figarogem
你可以看看评论 :
您可以直接在启动服务器的shell上设置环境variables:
 FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef rails server 
 或者(相当黑客),你可以在你的config/environments/development.rb设置它们: 
 ENV['FACEBOOK_APP_ID'] = "12345"; ENV['FACEBOOK_SECRET'] = "abcdef"; 
另一种方法
 但是我不会做。 我会创build一个configuration文件(比如config/facebook.yml ),它为每个环境保存相应的值。 然后在初始化程序中将其作为常量加载: 
 config/facebook.yml 
 development: app_id: 12345 secret: abcdef test: app_id: 12345 secret: abcdef production: app_id: 23456 secret: bcdefg 
 config/initializers/facebook.rb 
 FACEBOOK_CONFIG = YAML.load_file("#{::Rails.root}/config/facebook.yml")[::Rails.env] 
 然后用FACEBOOK_CONFIG['app_id']和ENV['FACEBOOK_SECRET']通过FACEBOOK_CONFIG['secret']replace代码中的ENV['FACEBOOK_SECRET'] FACEBOOK_CONFIG['secret'] 。 
有几个选项:
- 
从命令行设置环境variables: export FACEBOOK_APP_ID=your_app_id export FACEBOOK_SECRET=your_secret你可以把上面的代码放到 ~/.bashrc
- 
运行 rails s时设置环境variables:FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret rails s
- 
创build一个 .env文件:FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret并使用Foreman (开始您的应用程序与 foreman start)或dotenvgem。
 这是另一个想法。 如上所述,在provider.yml文件中定义键和值。 然后把它放在你的environment.rb (调用Application.initialize! ): 
 YAML.load_file("#{::Rails.root}/config/provider.yml")[::Rails.env].each {|k,v| ENV[k] = v } 
 然后这些环境variables可以在omniauth初始化器中被引用,而在初始化器之间没有任何顺序依赖性。