我已经完成了在ruby on rails上创建我的第一个facebook应用程序。在我的控制器中,我有点像
@oauth = Koala::Facebook::OAuth.new(app_id,secret_id,callback_url) (Replaced with temp values)
我想知道我的控制器中是否可以使用这些值,还是应该将其隐藏在应用程序的其他位置?将它们分配给变量?
这里的编程习惯是什么?
答案 0 :(得分:4)
实际上,我们希望避免在版本控制系统中记录这些值。
我通常采用的方法如下:
将以下内容添加到应用程序类定义
中的config/application.rb
# Loads app config from /config/env_vars.yml
require 'yaml'
rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
config = YAML.load_file(rails_root.to_s + '/config/env_vars.yml')
if config.key?(Rails.env) && config[Rails.env].is_a?(Hash)
config[Rails.env].each do |key, value|
ENV[key] = value.to_s
end
end
在名为config/
的{{1}}中创建一个文件,并包含以下内容
env_vars.yml
用您的api详细信息替换development:
FB_APP_ID: APP_ID_HERE
FB_APP_SECRET: APP_SECRET_HERE
和APP_ID_HERE
。根据需要向该文件添加尽可能多的其他值(即Twitter密钥等),并为每个环境重复(例如,如果您有用于开发,登台和生产的不同FB应用程序)。然后可以在控制器中将这些引用为APP_SECRET_HERE
等。
如果使用这种方法,您可以将env_vars.yml保留在VCS之外,这意味着您实际上没有将这些值提交到您的存储库,同时仍然可以将它们提供给您的应用。
最后,如果您使用Heroku,则为每个应用程序分配这些值作为环境变量很容易(即ENV['FB_APP_ID']
- 有关详细信息,请参阅https://devcenter.heroku.com/articles/config-vars),从而无需将这些值提交到在推进Heroku之前的回购。
如果从git中排除heroku config:set FB_APP_ID=234234324234
,则在推送到Heroku时此文件将不可用,导致您的应用在启动时崩溃。最简单的解决方案是修改添加到env_vars.yml
的代码,如下所示:
config/application.rb
通过将其包装在# Loads app config from /config/env_vars.yml
unless Rails.env == 'production'
require 'yaml'
rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
config = YAML.load_file(rails_root.to_s + "/config/env_vars.yml")
if config.key?(Rails.env) && config[Rails.env].is_a?(Hash)
config[Rails.env].each do |key, value|
ENV[key] = value.to_s
end
end
end
条件中,如果在unless Rails.env == 'production'
(Heroku的默认环境)上运行,它将被跳过。如果为Heroku使用多个环境(例如production
,staging
,uat
),则可以将其修改为
production
一旦提交并推送到Heroku,它将不再寻找unless %w(staging uat production).include?(Rails.env)
文件,让您可以通过{{1}自由设置配置变量。 } Heroku toolbelt命令。
答案 1 :(得分:3)
看一下这篇文章:http://railsapps.github.com/rails-environment-variables.html
我更喜欢使用figaro gem:https://github.com/laserlemon/figaro