2011-03-01 69 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參考
祝你有美好的一天!