在rails中存储应用程序特定配置的最佳方法是什么?

Ric*_*ras 6 configuration ruby-on-rails

我需要在rails中存储特定于应用程序的配置.但它必须是:

  • 可在任何文件(模型,视图,帮助器和控制器)中访问
  • 指定(或不指定)环境,这意味着每个环境都可以覆盖environment.rb中指定的配置

我试过使用environment.rb并添加类似的东西

USE_USER_APP = true
Run Code Online (Sandbox Code Playgroud)

这对我有用,但是当试图在特定环境中覆盖它时它不会工作,因为例如,production.rb似乎在Rails:Initializer.run块中.

那么,有人吗?

Bil*_*ner 11

看看Configatron:http://github.com/markbates/configatron/tree/master

我还没有使用它,但他现在正积极开发它,看起来很不错.


web*_*mat 4

我昨天正在帮助一位朋友设置里卡多提到的解决方案。我们通过加载与此类似的 YAML 文件(根据此处的内存)对其进行了一些修改:

require 'ostruct'
require 'yaml'
require 'erb'
#config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)
Run Code Online (Sandbox Code Playgroud)

这使得他能够在配置中嵌入 Ruby 代码,就像在 Rhtml 中一样:

development:
  path_to_something: <%= RAILS_ROOT %>/config/something.yml
Run Code Online (Sandbox Code Playgroud)