我有一個Rails應用程序,並且從該網站的管理部分中,我希望能夠啓用/停用某些設置,例如投放廣告或嵌入Google Analytics(分析)跟蹤代碼。我應該在哪裏存儲Rails應用程序的站點整個網站配置設置?
在Rails中有最佳實踐嗎?一個想法是創建一個設置表並在其中存儲值。
我有一個Rails應用程序,並且從該網站的管理部分中,我希望能夠啓用/停用某些設置,例如投放廣告或嵌入Google Analytics(分析)跟蹤代碼。我應該在哪裏存儲Rails應用程序的站點整個網站配置設置?
在Rails中有最佳實踐嗎?一個想法是創建一個設置表並在其中存儲值。
您可以將您的配置存儲在config/
目錄中。我知道一些將它們的配置存儲在那個目錄中的應用程序。 (例如,在Teambox中的teambox.yml
)。
我會將這些信息存儲在數據庫中,除非您無法訪問這些信息。如果您無法訪問數據庫,則可以將該文件存儲在config文件夾中。
以下是用於讀取和寫入配置文件的示例控制器代碼。
def featured_specials
@featured_specials = YAML::load_file("#{RAILS_ROOT}/config/featured_specials.yml")
end
def save_featured_specials
config_file = "#{RAILS_ROOT}/config/featured_specials.yml"
File.new(config_file, "w") unless File.exist?(config_file)
File.open(config_file, "w") do |f|
f.write(params['formvars'].to_yaml)
end
flash[:notice] = 'Featured Specials have been saved.'
redirect_to :action => 'featured_specials'
end
注意:這段代碼可以清理很多,但應該作爲一個體面的例子。
如果你不打算用於運行時配置,那麼你可能會使用類似rbates'漂亮,配置發電機:http://github.com/ryanb/nifty-generators
我已經使用了簡單的構建時的配置設置。所以,舉例來說,存儲支付網關憑據電子商務網站的時候,我load_gateway_config.yml看起來是這樣的:
require 'ostruct'
raw_config = File.read(Rails.root + "config/gateway_config.yml")
GATEWAY_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys
#allow dot notation access
GatewayConfig = OpenStruct.new(GATEWAY_CONFIG)
然後,抓住你的配置文件中的設置,你會打電話給像
GatewayConfig.username
另一個選項是configuration gem它給你類似的點符號用法,但也有更高級的選項,如設置默認值,配置文件是Ruby而不是YAML。
我已經upvoted不同的答案,但對於一個快速和骯髒的方式,您可以初始化的代碼塊後environment.rb中刪除一個類變量。
你將如何呈現HTML? – s84 2010-08-21 02:01:28
這聽起來像你正在編輯運行時設置的,這可能在一個數據庫表中的歸屬。 – meagar 2010-08-21 02:06:08
山姆,我在想HTML將在應用佈局文件可能使用自定義的helper方法來呈現。你提到 – Moe 2010-08-21 02:20:02