我有一个rails应用程序,我希望能够启用/禁用某些设置,例如投放广告或嵌入Google Analytics跟踪代码。
Rails中有最佳实践吗?一种想法是创建一个设置表并在其中存储值。
答案 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中的类变量。