我想知道如何将自定义配置变量添加到rails应用程序以及如何在控制器中访问它们,例如我想能够在配置文件中定义upload_directory,例如development.rb并且能够在我的一个中访问它控制器 .
其次我计划在我的应用程序中为上传提供S3支持,如果我想添加带有s3访问权限的yaml文件,密钥,如何在我的Rails应用程序中初始化它以及如何访问我定义的值在那个配置文件中 .
我真的很喜欢settingslogic宝石 . 非常容易设置和使用 .
https://github.com/binarylogic/settingslogic
如果您使用Heroku或者需要将您的应用程序设置保留为环境变量,figaro gem非常有用 .
Update 1
非常推荐:我现在用Rails Config gem进行它提供的细粒度控制 .
Update2
如果您想要快速解决方案,请查看下面的Jack Pratt's answer .
Although my original answer below still works, this answer is now outdated. I recommend looking at updates 1 and 2.
原答案:
对于快速解决方案,观看Ryan Bates的"YAML Configuration File" screen cast应该会非常有帮助 .
综上所述:
# 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
在Rails 3中,可以将特定于应用程序的自定义配置数据放在应用程序配置对象中 . 可以在初始化文件或环境文件中分配配置 - 比如给定的应用程序 MyApp :
MyApp
MyApp::Application.config.custom_config_variable = :my_config_setting
要么
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
在Rails 3.0.5中,以下方法对我有用:
在 config/environments/development.rb 中,写一下
config/environments/development.rb
config.custom_config_key = :config_value
然后可以使用其他文件引用值 custom_config_key
custom_config_key
Rails.application.config.custom_config_key
这适用于rails 3.1:
in config/environment.rb (or in config/environments/.. to target a specific environment) :
YourApp::Application.config.yourKey = 'foo'
这可以在控制器或视图中访问,如下所示:
YourApp::Application.config.yourKey
(YourApp应替换为您的应用程序名称 . )
Note :这是Ruby代码,所以如果你有很多配置键,你可以这样做:
在config / environment.rb中:
YourApp::Application.configure do config.something = foo config..... config.... . config.... end
假设您将自定义变量放入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.application.config_for :acme
acme.yml
Since Rails 4.2, without additional gems, 您只需使用 Rails.application.config_for :hi 即可加载config / hi.yml .
Rails.application.config_for :hi
For example:
touch config/passwords.yml
#config/passwords.yml development: username: 'a' password: 'b' production: username: 'aa' password: 'bb'
touch config/initializers/constants.rb
#config/initializers/constants.rb AUTHENTICATION = Rails.application.config_for :passwords
AUTHENTICATION
#rails c production :001> AUTHENTICATION['username'] => 'aa'
echo /config/passwords.yml >> .gitignore
cp /config/passwords.yml /config/passwords.example.yml
我只是想在Rails 4.2中更新这个最新的东西,你现在可以在任何 config/**/*.rb 文件中执行此操作:
config/**/*.rb
config.x.whatever.you.want = 42
...这将在您的应用中提供:
Rails.configuration.x.whatever.you.want
在这里查看更多:http://guides.rubyonrails.org/configuring.html#custom-configuration
看看这个整洁的宝石正是这样做的:https://github.com/mislav/choices
这样,您的敏感数据就不会在开源项目中公开
我为YAML设置创建了一个简单的插件:Yettings
它的工作方式与khelll的答案中的代码类似,但您只需添加此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-settings来获取需要通过Web界面更改的全局配置值 .
我们在工作中开始做的事情是ActiveSupport Ordered Hash
这允许您在环境文件中干净地定义配置,例如
config.service = ActiveSupport::OrderedOptions.new config.service.api_key = ENV['SERVICE_API_KEY'] config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']
我建议如何处理应用程序中的配置 . 有三个基本规则:
更改您的配置而不是代码;
在条件下使用配置;
写代码意味着什么 .
要获得更详细的概述,请点击此链接:Rails configuration in the proper way
14 回答
我真的很喜欢settingslogic宝石 . 非常容易设置和使用 .
https://github.com/binarylogic/settingslogic
如果您使用Heroku或者需要将您的应用程序设置保留为环境变量,figaro gem非常有用 .
Update 1
非常推荐:我现在用Rails Config gem进行它提供的细粒度控制 .
Update2
如果您想要快速解决方案,请查看下面的Jack Pratt's answer .
Although my original answer below still works, this answer is now outdated. I recommend looking at updates 1 and 2.
原答案:
对于快速解决方案,观看Ryan Bates的"YAML Configuration File" screen cast应该会非常有帮助 .
综上所述:
在Rails 3中,可以将特定于应用程序的自定义配置数据放在应用程序配置对象中 . 可以在初始化文件或环境文件中分配配置 - 比如给定的应用程序
MyApp
:要么
要读取设置,只需调用配置变量而不进行设置:
UPDATE Rails 4
在Rails 4中有一种新方法=> http://guides.rubyonrails.org/configuring.html#custom-configuration
在Rails 3.0.5中,以下方法对我有用:
在
config/environments/development.rb
中,写一下然后可以使用其他文件引用值
custom_config_key
这适用于rails 3.1:
in config/environment.rb (or in config/environments/.. to target a specific environment) :
这可以在控制器或视图中访问,如下所示:
(YourApp应替换为您的应用程序名称 . )
Note :这是Ruby代码,所以如果你有很多配置键,你可以这样做:
在config / environment.rb中:
在Rails 4中
假设您将自定义变量放入yaml文件中:
创建一个初始化器来加载它们:
现在,您可以在应用中的任何位置访问这些值,如下所示:
Rails.application.config_for :acme
将加载acme.yml
并使用正确的环境很方便 .Since Rails 4.2, without additional gems, 您只需使用
Rails.application.config_for :hi
即可加载config / hi.yml .For example:
touch config/passwords.yml
touch config/initializers/constants.rb
AUTHENTICATION
常量:echo /config/passwords.yml >> .gitignore
,为您的舒适创建示例文件cp /config/passwords.yml /config/passwords.example.yml
,然后在 生产环境 控制台中使用实际 生产环境 值编辑示例文件 .我只是想在Rails 4.2中更新这个最新的东西,你现在可以在任何
config/**/*.rb
文件中执行此操作:...这将在您的应用中提供:
在这里查看更多:http://guides.rubyonrails.org/configuring.html#custom-configuration
看看这个整洁的宝石正是这样做的:https://github.com/mislav/choices
这样,您的敏感数据就不会在开源项目中公开
我为YAML设置创建了一个简单的插件:Yettings
它的工作方式与khelll的答案中的代码类似,但您只需添加此YAML配置文件:
该插件动态创建一个类,允许您在应用程序中以类方法的形式访问YML设置,如下所示:
此外,如果要使用具有唯一名称的多个设置文件,可以将它们放在app / config内的子目录中,如下所示:
然后你可以访问这样的值:
它还为您提供可以根据环境覆盖的默认设置 . 您也可以在yml文件中使用erb .
我喜欢使用rails-settings来获取需要通过Web界面更改的全局配置值 .
我们在工作中开始做的事情是ActiveSupport Ordered Hash
这允许您在环境文件中干净地定义配置,例如
我建议如何处理应用程序中的配置 . 有三个基本规则:
更改您的配置而不是代码;
在条件下使用配置;
写代码意味着什么 .
要获得更详细的概述,请点击此链接:Rails configuration in the proper way