我应该在哪里存储Rails应用程序的站点站点配置设置?

时间:2010-08-21 01:58:16

标签: ruby-on-rails

我有一个rails应用程序,我希望能够启用/禁用某些设置,例如投放广告或嵌入Google Analytics跟踪代码。

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

4 个答案:

答案 0 :(得分:3)

如果您不打算进行运行时配置,那么您可以使用类似rbates的nifty-config生成器: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。

答案 1 :(得分: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

注意:这段代码可以清理一下,但应该是一个不错的例子。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我已经提出了不同的答案,但是对于一种快速而肮脏的方式,你可以在初始化代码块之后删除environment.rb中的类变量。