我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?
其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。
我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?
其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。
当前回答
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 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
如果您使用Heroku,或者需要将应用程序设置作为环境变量,那么figaro gem非常有用。
我将建议如何处理应用程序中的配置的好方法。有三个基本规则:
改变你的配置而不是代码; 在条件下使用配置; 编写有意义的代码。
要获得更详细的概述,请参见以下链接:以正确的方式配置Rails
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
我真的很喜欢设置逻辑宝石。非常容易设置和使用。
https://github.com/binarylogic/settingslogic