我一直在研究Ryan Bates在他的Facebook身份验证视频教程中是如何设置以下环境变量“FACEBOOK_APP_ID”和“FACEBOOK_SECRET”的。
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
有类似的问题,但我没有找到在Rails 3.2.1上能够工作的答案。
更新:
截至2013年5月,我处理环境变量的首选方法是使用Figaro gem
我一直在研究Ryan Bates在他的Facebook身份验证视频教程中是如何设置以下环境变量“FACEBOOK_APP_ID”和“FACEBOOK_SECRET”的。
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET']
有类似的问题,但我没有找到在Rails 3.2.1上能够工作的答案。
更新:
截至2013年5月,我处理环境变量的首选方法是使用Figaro gem
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]
然后,用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
这里有另一个想法。像上面建议的那样,在provider.yml
文件中定义键和值。然后在environment.rb
中加入以下内容(在调用Application.initialize!
之前):
YAML.load_file("#{::Rails.root}/config/provider.yml")[::Rails.env].each {|k,v| ENV[k] = v }
这些环境变量可以在omniauth
初始化程序中引用,而不会出现任何初始化程序之间的排序依赖关系。
config/initializer/facebook.rb
应该加上一个 's' 变成config/initializers/facebook.rb
,对吗? - GMA