在Rails 3中设置环境变量(Devise+Omniauth)



我一直在试图弄清楚Ryan Bates是如何在他的Facebook认证屏幕中设置以下"Facebook_APP_ID"one_answers"Facebook_SECRET"环境变量的。

provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']

周围也有类似的问题,但没有我在Rails3.2.1上所能得到的答案。

更新:

截至2013年5月,我首选的处理ENV变量的方法是通过Figaro-gem

您可以查看注释:

您可以直接在启动服务器的shell上设置环境变量:

FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef rails server

或者(相当棘手),你可以在config/environments/development.rb:中设置它们

ENV['FACEBOOK_APP_ID'] = "12345";
ENV['FACEBOOK_SECRET'] = "abcdef";

另一种方式

然而,我两者都不做。我会创建一个配置文件(比如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_APP_ID'],用FACEBOOK_CONFIG['secret']替换ENV['FACEBOOK_SECRET']

有几个选项:

  • 从命令行设置环境变量:

    export FACEBOOK_APP_ID=your_app_id
    export FACEBOOK_SECRET=your_secret
    

    您可以将以上行放在~/.bashrc

  • 运行rails s:时设置环境变量

    FACEBOOK_APP_ID=your_app_id FACEBOOK_SECRET=your_secret rails s
    
  • 使用创建.env文件

    FACEBOOK_APP_ID=your_app_id
    FACEBOOK_SECRET=your_secret
    

    并使用Foreman(使用foreman start启动您的应用程序)或dotenv gem。

这是另一个想法。如上所述,在provider.yml文件中定义键和值。然后将其放入您的environment.rb(在呼叫Application.initialize!之前):

YAML.load_file("#{::Rails.root}/config/provider.yml")[::Rails.env].each {|k,v| ENV[k] = v }

然后这些环境变量可以在omniauth初始化器中被引用,而初始化器之间没有任何排序依赖关系。

最新更新