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

时间:2012-07-25 11:24:50

标签: ruby-on-rails ruby-on-rails-3 environment-variables omniauth railscasts

我一直试图弄清楚Ryan Bates在他的Facebook Authentication screencast中如何设置以下“FACEBOOK_APP_ID”和“FACEBOOK_SECRET”环境变量。

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

周围有类似的问题,但没有我能够在Rails 3.2.1上开展工作的答案。

更新

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

3 个答案:

答案 0 :(得分:118)

您可以查看the comments

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

FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef rails server

或者(相当hacky),您可以在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]

然后在代码中将ENV['FACEBOOK_APP_ID']替换为FACEBOOK_CONFIG['app_id'],将ENV['FACEBOOK_SECRET']替换为FACEBOOK_CONFIG['secret']

答案 1 :(得分:29)

有几种选择:

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

    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。

答案 2 :(得分:12)

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

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

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