2011-03-01 130 views
5

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

关键是:我应该在哪里放这些文件? Rails应用程序中是否有默认位置来存储此类内容?

请注意,我的应用程序部署在Heroku上。

回答

7

我一直做的是:

  • 如果该文件是一个普通的配置文件:我在目录中创建/配置一个YAML文件,每个环境
  • 一个上流社会的关键。如果我有一个文件针对每个环境(大项目):我创建每个环境一个YAML并将其存储在/配置/环境/

然后,我创建,我加载YAML的初始化,我象征配置哈希键和分配它像一个常数像APP_CONFIG

+1

此方法的+1。 [这是这种方法的一个例子](https://gist.github.com/a217834493ff7d727ade)以及一些额外的功能;第二种方法很容易采用(每个文件一个环境)。 – 2011-03-02 02:08:50

1

您也可以将它包含在模型中,以便您可以在应用程序的任何位置调用Settings.var_name,并且它将解析文件以获取正确的环境。

随着settingslogic宝石:

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

Rails的默认创建一个config目录,包含了大量的配置信息为您的应用程序,包括数据库和环境的信息。我认为这是合乎逻辑的首要考虑事项。

第二选择将是app目录,其中包含应用程序的所有模型,视图和控制器,但我认为,目录中包含可执行代码和模板,所以我与config目录去,亲自。

4

我会ususaly采用这种方法:

一个配置/ config.yml

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

然后在初始化

#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)) 

没有DB表创建一个ostruct,每个环境设置和你可以以简单的方式回顾信息

AppSetting.another_key 
AppSetting.app_name 

here a参考
祝你有美好的一天!