在Rails中存储(结构化)配置数据的位置

时间:2011-03-01 23:07:30

标签: ruby-on-rails ruby ruby-on-rails-3 configuration heroku

对于我正在编写的Rails 3应用程序,我正在考虑从本地文件系统上的XML,YAML或JSON文件中读取一些配置数据。

重点是:我应该把这些文件放在哪里? Rails应用程序中是否存在存储此类内容的默认位置?

作为旁注,我的应用程序部署在Heroku上。

4 个答案:

答案 0 :(得分:8)

我一直在做的是:

  • 如果文件是一般配置文件:我在目录/ config中创建一个YAML文件,每个环境有一个上层类密钥
  • 如果每个环境都有一个文件(大项目):我为每个环境创建一个YAML并将它们存储在/ config / environments /

然后我创建一个初始化器,在其中加载YAML,我象征着配置哈希的键并将其分配给一个常量,如APP_CONFIG

答案 1 :(得分:4)

我将通常采用这种方法:

config / config.yml

development:
  another_key: "test"
  app_name: "My App"
test:
  another_key: "test"
production:
  prova: "ciao"

然后在初始化程序中创建一个ostruct

#config/initializer/load_config.rb
require 'ostruct'
config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
::AppSetting = OpenStruct.new(config.send(RAILS_ENV))

没有数据库表,每个环境设置,您可以以简单的方式检索信息

AppSetting.another_key
AppSetting.app_name

here参考文献
祝你有愉快的一天!

答案 2 :(得分:1)

您还可以将其包含在模型中,这样您就可以从应用中的任何位置调用Settings.var_name,它会解析文件以获得合适的环境。

使用settingslogic gem:

class Settings < Settingslogic
  source "#{Rails.root}/config/settings.yml"
  namespace Rails.env
end

答案 3 :(得分:1)

Rails默认创建一个config目录,其中包含应用程序的大量配置信息,包括数据库和环境信息。我认为这是一个合乎逻辑的第一个考虑的地方。

第二个选择是app目录,其中包含应用程序的所有模型,视图和控制器,但我认为该目录包含可执行代码及其模板,因此我将使用个人config目录。