我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?
其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。
我想知道如何将自定义配置变量添加到Rails应用程序,以及如何在控制器中访问它们?
其次,我计划在我的应用程序中有S3支持上传,如果我想添加一个具有S3访问权限的yaml文件,秘密密钥,我如何在我的Rails应用程序中初始化它,以及如何访问我在配置文件中定义的值。
当前回答
我创建了一个简单的YAML设置插件:Yettings
它的工作方式与khell回答中的代码类似,但你只需要添加这个YAML配置文件:
app/config/yetting.yml
这个插件动态创建了一个类,允许你在你的应用程序中访问YML设置作为类方法,如下所示:
Yetting.your_setting
此外,如果你想使用多个具有唯一名称的设置文件,你可以将它们放在app/config内的子目录中,如下所示:
app/config/yettings/first.yml
app/config/yettings/second.yml
然后你可以像这样访问这些值:
FirstYetting.your_setting
SecondYetting.your_setting
它还为您提供了可以覆盖每个环境的默认设置。你也可以在yml文件中使用erb。
其他回答
从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 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
更新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
我真的很喜欢设置逻辑宝石。非常容易设置和使用。
https://github.com/binarylogic/settingslogic
我只是想更新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