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

neo*_*eon 53 ruby-on-rails environment-variables railscasts omniauth ruby-on-rails-3

我一直试图弄清楚Ryan Bates在他的Facebook身份验证截屏中如何设置以下"FACEBOOK_APP_ID"和"FACEBOOK_SECRET"环境变量.

provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
Run Code Online (Sandbox Code Playgroud)

有类似的问题,但没有我能够在Rails 3.2.1上工作的答案.

更新:

截至2013年5月,我处理ENV变量的首选方法是通过费加罗宝石

ibl*_*lue 118

你可以看一下评论:

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

FACEBOOK_APP_ID=12345 FACEBOOK_SECRET=abcdef rails server
Run Code Online (Sandbox Code Playgroud)

或者(相当hacky),你可以在你的config/environments/development.rb:

ENV['FACEBOOK_APP_ID'] = "12345";
ENV['FACEBOOK_SECRET'] = "abcdef";
Run Code Online (Sandbox Code Playgroud)

另一种方式

但是我不会这样做.我会创建一个配置文件(比如说config/facebook.yml),它保存每个环境的相应值.然后在初始化程序中将其作为常量加载:

config/facebook.yml

development:
  app_id: 12345
  secret: abcdef

test:
  app_id: 12345
  secret: abcdef

production:
  app_id: 23456
  secret: bcdefg
Run Code Online (Sandbox Code Playgroud)

config/initializers/facebook.rb

FACEBOOK_CONFIG = YAML.load_file("#{::Rails.root}/config/facebook.yml")[::Rails.env]
Run Code Online (Sandbox Code Playgroud)

然后更换ENV['FACEBOOK_APP_ID']在你的代码FACEBOOK_CONFIG['app_id'],并ENV['FACEBOOK_SECRET']通过FACEBOOK_CONFIG['secret'].

  • 请注意,初始化程序加载的顺序是按字母顺序排列的.因此,如果您需要在另一个初始化程序中使用配置,您必须将facebook.rb命名为01_facebook.rb(不太漂亮 - 但有效) (7认同)
  • 太棒了 - 适合我.然后将facebook.yml放在.gitignore中 - 对吗?还有一点需要注意 - 如果在另一个初始值设定项中使用该变量(就像我使用devise.rb一样),请确保在需要变量的文件之前将facebook.rb重命名为字母顺序.在我的情况下,我必须重命名facebook.rb到config_facebook.rb,以便在devise.rb之前加载它 (3认同)
  • 挑剔:不应该`config/initializer/facebook.rb`是`config/initializers/facebook.rb`和's'? (2认同)

Ste*_*fan 29

有几种选择:


Jan*_*ich 12

这是另一个想法.provider.yml如上所述,在文件中定义键和值.然后把它放在你的environment.rb(在通话之前Application.initialize!):

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

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