我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?
其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。
我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?
其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。
当前回答
更新1
非常推荐:我现在正在使用Rails Config gem,因为它提供了细粒度的控制。
更新2
如果你想要一个快速的解决方案,那么看看下面杰克·普拉特的答案。
虽然我下面最初的答案仍然有效,但这个答案现在已经过时了。我建议查看更新1和更新2。
最初的回答:
对于快速解决方案,观看Ryan Bates的“YAML配置文件”屏幕会很有帮助。
总而言之:
# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]
# application.rb
if APP_CONFIG['perform_authentication']
# Do stuff
end
其他回答
我们在工作中开始做的是ActiveSupport Ordered Hash
它允许你在环境文件中清晰地定义你的配置。
config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV['SERVICE_API_KEY']
config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']
在Rails 3中,特定于应用程序的自定义配置数据可以放置在应用程序配置对象中。配置可以在初始化文件或环境文件中分配——例如对于给定的应用程序MyApp:
MyApp::Application.config.custom_config_variable = :my_config_setting
or
Rails.configuration.custom_config_variable = :my_config_setting
要读取设置,只需调用配置变量而不设置它:
Rails.configuration.custom_config_variable
=> :my_config_setting
UPDATE Rails 4
在Rails 4中,有一个新的方法=> http://guides.rubyonrails.org/configuring.html#custom-configuration
我喜欢使用rails-settings用于需要通过web界面更改的全局配置值。
看看这个整洁的宝石,正是这样做的: https://github.com/mislav/choices
这样,您的敏感数据就不会暴露在开源项目中
从Rails 4.2开始,没有额外的宝石,你可以加载config/hi。简单地使用Rails.application。config_for:嗨。
例如:
触控配置/ passwords.yml #配置/ passwords.yml 发展: 用户名:‘一个’ 密码:“b” 生产: 用户名:“aa” 密码:“bb”
配置初始化/ constants.rb联系 #配置/初始化/ constants.rb AUTHENTICATION = Rails.application。config_for:密码
现在你可以在应用程序的任何地方使用AUTHENTICATION常量: #rails c生产 :001> AUTHENTICATION['username'] => 'aa' 然后添加密码。Yml到。gitignore: echo /config/passwords。Yml >> .gitignore,为你的cp /config/密码创建一个示例文件。yml / config / passwords.example。Yml,然后在生产控制台中使用实际的生产值编辑示例文件。