我想知道如何将自定义配置变量添加到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和使用正确的环境。
其他回答
看看这个整洁的宝石,正是这样做的: https://github.com/mislav/choices
这样,您的敏感数据就不会暴露在开源项目中
如果您使用Heroku,或者需要将应用程序设置作为环境变量,那么figaro gem非常有用。
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-settings用于需要通过web界面更改的全局配置值。
在Rails 3.0.5中,以下方法对我来说是有效的:
在config /环境/发展。rb,写
config.custom_config_key = :config_value
值custom_config_key然后可以从其他文件引用
Rails.application.config.custom_config_key