我已经用 ruby on rails 创建了我的第一个 facebook 应用程序。在我的控制器中,我有类似的东西
@oauth = Koala::Facebook::OAuth.new(app_id,secret_id,callback_url) (Replaced with temp values)
我想知道在我的控制器中有这些值是否可以,或者我应该将它隐藏在我的应用程序的其他地方?将它们分配给变量?
这里正确的编程习惯是什么?
我已经用 ruby on rails 创建了我的第一个 facebook 应用程序。在我的控制器中,我有类似的东西
@oauth = Koala::Facebook::OAuth.new(app_id,secret_id,callback_url) (Replaced with temp values)
我想知道在我的控制器中有这些值是否可以,或者我应该将它隐藏在我的应用程序的其他地方?将它们分配给变量?
这里正确的编程习惯是什么?
归根结底是要避免在版本控制系统中记录这些值。
我通常采取的方法如下:
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/
在called中创建一个文件env_vars.yml
,并包含以下内容
development:
FB_APP_ID: APP_ID_HERE
FB_APP_SECRET: APP_SECRET_HERE
替换APP_ID_HERE
并APP_SECRET_HERE
使用您的 api 详细信息。根据需要向该文件添加尽可能多的其他值(即 Twitter 密钥等),并为每个环境重复(例如,如果您有不同的 FB 应用程序用于开发、登台和生产)。然后可以在您的控制器中引用这些ENV['FB_APP_ID']
等。
如果使用这种方法,您可以将 env_vars.yml 从您的 VCS 中删除,这意味着您实际上并未将这些值提交到您的存储库,同时仍使它们可用于您的应用程序。
最后,如果您使用 Heroku,为每个应用程序分配这些值作为环境变量很容易(即heroku config:set FB_APP_ID=234234324234
,有关更多详细信息,请参阅https://devcenter.heroku.com/articles/config-vars),无需提交这些在推送到 Heroku 之前对 repo 的值。
如果从 git 中排除env_vars.yml
,此文件在推送到 Heroku 时将不可用,导致您的应用程序在启动时崩溃。最简单的解决方案是修改添加到的代码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
通过将其包装在条件中,如果在(Heroku 的默认环境)unless Rails.env == 'production'
上运行,它将被跳过。production
如果为 Heroku 使用多个环境(例如staging
, uat
, production
),则可以将其修改为
unless %w(staging uat production).include?(Rails.env)
一旦提交并推送到 Heroku,它将不再寻找文件,让您可以通过Heroku toolbelt 命令逐个env_vars.yml
应用程序设置配置变量。heroku config:set
看看这篇文章:http ://railsapps.github.com/rails-environment-variables.html
我更喜欢使用 figaro gem:https ://github.com/laserlemon/figaro