我有一个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