在Rails中存储应用程序特定配置的最佳方法是什么?
时间:2020-03-06 14:29:56 来源:igfitidea点击:
我需要将应用程序特定的配置存储在Rails中。但这必须是:
- 在任何文件(模型,视图,助手和控制器)中均可访问
- 指定(或者未指定)环境,这意味着每个环境都可以覆盖environment.rb中指定的配置
我尝试使用environment.rb并放置类似
USE_USER_APP = true
这对我有用,但是当尝试在特定环境中覆盖它时,它将无法工作,因为例如production.rb似乎位于Rails:Initializer.run块中。
那么,有人吗?
解决方案
我在这里找到了一个好方法
查看Configatron:http://github.com/markbates/configatron/tree/master
我尚未使用它,但是他现在正在积极开发它,并且看起来还不错。
最基本的操作是从environment.rb中设置一个类变量。我已经针对Google Analytics(分析)完成了此操作。本质上,我需要一个不同的密钥,具体取决于我所处的环境,因此开发或者暂存不会使指标失真。
这就是我做的。
在lib / analytics / google_analytics.rb
中:
module Analytics class GoogleAnalytics @@account_id = nil cattr_accessor :account_id end end
然后在" environment.rb"或者" environments / production.rb"或者任何其他环境文件中:
Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"
然后,在我们要引用的任何地方,说出Google Analytics(分析)JavaScript的默认布局,我们只需调用" Analytics :: GoogleAnalytics.account_id"即可。
我正在帮助一个朋友建立里卡多昨天提到的解决方案。我们通过向YAML文件加载与此类似的东西(从内存中获取)来对它进行了一点破解:
require 'ostruct' require 'yaml' require 'erb' #config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml")) config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result)) env_config = config.send(RAILS_ENV) config.common.update(env_config) unless env_config.nil? ::AppConfig = OpenStruct.new(config.common)
这使他可以将Ruby代码嵌入到配置中,就像在Rhtml中一样:
development: path_to_something: <%= RAILS_ROOT %>/config/something.yml