2010-08-21 82 views
5

我有一个Rails应用程序,并且从该网站的管理部分中,我希望能够启用/停用某些设置,例如投放广告或嵌入Google Analytics(分析)跟踪代码。我应该在哪里存储Rails应用程序的站点整个网站配置设置?

在Rails中有最佳实践吗?一个想法是创建一个设置表并在其中存储值。

+0

你将如何呈现HTML? – s84 2010-08-21 02:01:28

+1

这听起来像你正在编辑运行时设置的,这可能在一个数据库表中的归属。 – meagar 2010-08-21 02:06:08

+0

山姆,我在想HTML将在应用布局文件可能使用自定义的helper方法来呈现。你提到 – Moe 2010-08-21 02:20:02

回答

0

您可以将您的配置存储在config/目录中。我知道一些将它们的配置存储在那个目录中的应用程序。 (例如,在Teambox中的teambox.yml)。

1

我会将这些信息存储在数据库中,除非您无法访问这些信息。如果您无法访问数据库,则可以将该文件存储在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 

注意:这段代码可以清理很多,但应该作为一个体面的例子。

3

如果你不打算用于运行时配置,那么你可能会使用类似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。

0

我已经upvoted不同的答案,但对于一个快速和肮脏的方式,您可以初始化的代码块后environment.rb中删除一个类变量。

相关问题