我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?

其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。


当前回答

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

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

config.custom_config_key = :config_value

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

Rails.application.config.custom_config_key

其他回答

In Rails 4

假设你把你的自定义变量放到一个yaml文件中:

# config/acme.yml
development:
  :api_user: 'joe'
  :api_pass: 's4cret'
  :timeout: 20

创建一个初始化式来加载它们:

# config/initializers/acme.rb
acme_config = Rails.application.config_for :acme

Rails.application.configure do
  config.acme = ActiveSupport::OrderedOptions.new
  config.acme.api_user = acme_config[:api_user]
  config.acme.api_pass = acme_config[:api_pass]
  config.acme.timeout  = acme_config[:timeout]
end

现在,在你的应用程序的任何地方,你都可以像这样访问这些值:

Rails.configuration.acme.api_user

Rails.application非常方便。Config_for:acme将加载你的acme。Yml和使用正确的环境。

我将建议如何处理应用程序中的配置的好方法。有三个基本规则:

改变你的配置而不是代码; 在条件下使用配置; 编写有意义的代码。

要获得更详细的概述,请参见以下链接:以正确的方式配置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

从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,然后在生产控制台中使用实际的生产值编辑示例文件。

我只是想更新Rails 4.2中最新的很酷的东西,你现在可以在你的config/**/*中做这个。rb文件:

config.x.whatever.you.want = 42

...这将在你的应用程序中可用:

Rails.configuration.x.whatever.you.want

更多信息请访问:http://guides.rubyonrails.org/configuring.html#custom-configuration