我想知道如何将自定义配置变量添加到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

其他回答

我真的很喜欢设置逻辑宝石。非常容易设置和使用。

https://github.com/binarylogic/settingslogic

我创建了一个简单的YAML设置插件:Yettings

它的工作方式与khell回答中的代码类似,但你只需要添加这个YAML配置文件:

app/config/yetting.yml

这个插件动态创建了一个类,允许你在你的应用程序中访问YML设置作为类方法,如下所示:

Yetting.your_setting

此外,如果你想使用多个具有唯一名称的设置文件,你可以将它们放在app/config内的子目录中,如下所示:

app/config/yettings/first.yml
app/config/yettings/second.yml

然后你可以像这样访问这些值:

FirstYetting.your_setting
SecondYetting.your_setting

它还为您提供了可以覆盖每个环境的默认设置。你也可以在yml文件中使用erb。

在Rails 3.0.5中,以下方法对我来说是有效的:

在config /环境/发展。rb,写

config.custom_config_key = :config_value

值custom_config_key然后可以从其他文件引用

Rails.application.config.custom_config_key

我们在工作中开始做的是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