53

我一直试图弄清楚 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

4

3 回答 3

119

你可以看看评论

您可以直接在启动服务器的 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']

于 2012-07-25T11:43:43.703 回答
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。

于 2012-07-25T11:51:28.083 回答
12

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

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

Then these environment variables can be referenced in the omniauth initializer without any ordering dependency among intializers.

于 2012-09-22T22:42:07.227 回答