Shi*_*hiv 332 configuration ruby-on-rails
我想知道如何将自定义配置变量添加到rails应用程序以及如何在控制器中访问它们,例如我想能够在配置文件中定义upload_directory,例如development.rb并且能够在我的一个中访问它控制器.
其次我计划在我的应用程序中为上传提供S3支持,如果我想添加带有s3访问,密钥的yaml文件,如何在我的Rails应用程序中初始化它以及如何访问我定义的值在该配置文件中.
小智 372
在Rails 3中,可以将特定于应用程序的自定义配置数据放在应用程序配置对象中.可以在初始化文件或环境文件中分配配置 - 例如,对于给定的应用程序MyApp:
MyApp::Application.config.custom_config_variable = :my_config_setting
Run Code Online (Sandbox Code Playgroud)
要么
Rails.configuration.custom_config_variable = :my_config_setting
Run Code Online (Sandbox Code Playgroud)
要读取设置,只需调用配置变量而不进行设置:
Rails.configuration.custom_config_variable
=> :my_config_setting
Run Code Online (Sandbox Code Playgroud)
更新Rails 4
在Rails 4中有一种新方法=> http://guides.rubyonrails.org/configuring.html#custom-configuration

khe*_*lll 163
更新1
非常推荐:我现在正在使用Rails Config gem进行精细控制.
UPDATE2
如果您想要快速解决方案,请查看下面的Jack Pratt的答案.
虽然我的原始答案仍然有效,但这个答案现在已经过时了.我建议查看更新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
Run Code Online (Sandbox Code Playgroud)
Rob*_*son 68
在Rails 3.0.5中,以下方法对我有用:
在config/environments/development.rb,写
config.custom_config_key = :config_value
Run Code Online (Sandbox Code Playgroud)
custom_config_key然后可以使用其他文件引用该值
Rails.application.config.custom_config_key
Run Code Online (Sandbox Code Playgroud)
Ala*_*ois 31
这适用于rails 3.1:
在config/environment.rb中(或在config/environments/..中定位特定环境):
YourApp::Application.config.yourKey = 'foo'
Run Code Online (Sandbox Code Playgroud)
这将在控制器或视图中访问,如下所示:
YourApp::Application.config.yourKey
Run Code Online (Sandbox Code Playgroud)
(YourApp应替换为您的应用程序名称.)
注意:这是Ruby代码,所以如果你有很多配置键,你可以这样做:
在config/environment.rb中:
YourApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
Run Code Online (Sandbox Code Playgroud)
pym*_*kin 28
假设您将自定义变量放入yaml文件中:
# config/acme.yml
development:
:api_user: 'joe'
:api_pass: 's4cret'
:timeout: 20
Run Code Online (Sandbox Code Playgroud)
创建一个初始化器来加载它们:
# 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
Run Code Online (Sandbox Code Playgroud)
现在,您可以在应用中的任何位置访问这些值,如下所示:
Rails.configuration.acme.api_user
Run Code Online (Sandbox Code Playgroud)
Rails.application.config_for :acme加载acme.yml和使用正确的环境很方便.
lak*_*are 20
从Rails 4.2开始,没有额外的宝石,只需使用即可加载config/hi.ymlRails.application.config_for :hi.
例如:
touch config/passwords.yml
#config/passwords.yml
development:
username: 'a'
password: 'b'
production:
username: 'aa'
password: 'bb'
Run Code Online (Sandbox Code Playgroud)touch config/initializers/constants.rb
#config/initializers/constants.rb
AUTHENTICATION = Rails.application.config_for :passwords
Run Code Online (Sandbox Code Playgroud)现在你可以AUTHENTICATION在应用程序的任何地方使用常量:
#rails c production
:001> AUTHENTICATION['username'] => 'aa'
Run Code Online (Sandbox Code Playgroud)然后将passwords.yml添加到.gitignore : echo /config/passwords.yml >> .gitignore,创建一个示例文件以获得舒适感cp /config/passwords.yml /config/passwords.example.yml,然后在生产控制台中使用实际生产值编辑示例文件.
jpg*_*eek 20
轨道 6 和 7
许多过时的答案,因此添加一个特定于 Rails 6 的答案。
应用程序特定的配置位于初始化程序文件中。详细信息在这里:边缘指南
例子:
module MyApp
class Application < Rails::Application
config.test_val = 'foo'
end
end
Run Code Online (Sandbox Code Playgroud)
或者:
Rails.application.config.test_val = 'foo'
Run Code Online (Sandbox Code Playgroud)
现在可以通过以下方式访问:
Rails.configuration.test_val
Run Code Online (Sandbox Code Playgroud)
还有更多的可能性。 边缘指南#custom-configuration
例如,您还可以设置嵌套命名空间配置:
config.x.payment_processing.schedule = :daily
config.x.payment_processing.retries = 3
config.super_debugger = true
Run Code Online (Sandbox Code Playgroud)
或使用 config_for 加载整个自定义配置文件:
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
Run Code Online (Sandbox Code Playgroud)
然后加载它:
module MyApp
class Application < Rails::Application
config.payment = config_for(:payment)
end
end
Run Code Online (Sandbox Code Playgroud)
sma*_*thy 13
我只是想在Rails 4.2中更新这个最新的东西,你现在可以在任何config/**/*.rb文件中执行此操作:
config.x.whatever.you.want = 42
Run Code Online (Sandbox Code Playgroud)
...这将在您的应用中提供:
Rails.configuration.x.whatever.you.want
Run Code Online (Sandbox Code Playgroud)
在此处查看更多信息:http://guides.rubyonrails.org/configuring.html#custom-configuration
| 归档时间: |
|
| 查看次数: |
163186 次 |
| 最近记录: |