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

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


当前回答

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

https://github.com/binarylogic/settingslogic

其他回答

这适用于rails 3.1:

在config /环境。Rb(或在config/environments/..以特定环境为目标):

YourApp::Application.config.yourKey = 'foo'

这将在控制器或视图中访问,如下所示:

YourApp::Application.config.yourKey

(YourApp应替换为您的应用程序名称。)

注意:它是Ruby代码,所以如果你有很多配置键,你可以这样做:

在config /环境。rb:

YourApp::Application.configure do
  config.something = foo
  config.....
  config....
  .
  config....
end

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

https://github.com/binarylogic/settingslogic

看看这个整洁的宝石,正是这样做的: https://github.com/mislav/choices

这样,您的敏感数据就不会暴露在开源项目中

我只是想更新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

Rails 6和7

许多过时的答案,所以添加一个特定于Rails 6的答案。

应用程序特定的配置放在初始化文件中。详细信息在这里:边缘指南

例子:

配置/初始化/ foo.rb

module MyApp
  class Application < Rails::Application
    config.test_val = 'foo'
  end
end

另外:

Rails.application.config.test_val = 'foo'

现在可以通过以下方式访问:

Rails.configuration.test_val

更多的可能性。 边缘指南#自定义配置

例如,你也可以设置嵌套的命名空间配置:

config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries  = 3
config.super_debugger = true

或者使用config_for加载整个自定义配置文件:

配置/ payment.yml

production:
  environment: production
  merchant_id: production_merchant_id
  public_key:  production_public_key
  private_key: production_private_key

development:
  environment: sandbox
  merchant_id: development_merchant_id
  public_key:  development_public_key
  private_key: development_private_key

然后加载:

配置/初始化/ load_payment.rb

module MyApp
  class Application < Rails::Application
    config.payment = config_for(:payment)
  end
end