我有以下文件夹结构
configs/
-- dev/
---- app-config.rb
-- qa/
---- app-config.rb
-- prod/
---- app-config.rb
所有app-config.rb都具有相同的结构,但配置值将不同
module App
module Config
@@config = {some hash configs}
end
end
现在我正在使用 Thor 进行CLI,所以我的命令就像
thor add CONF
例如,thor add dev
或thor add perf
所以取决于CONF param它应该读取app-config.rb并加载@@ config,然后我将在代码中使用。
但不知怎的,它不起作用,我正在
在App :: Config 中未初始化的类变量@@ config
请建议任何设计达到相同目的。
提前致谢。
答案 0 :(得分:0)
我认为问题在于这个变量的范围:
http://www.wellho.net/mouth/2609_Scope-of-variables-important-to-Ruby-on-Rails.html
将$ variable用于全局变量。因为@@是一个Class变量。
你会发现这很有用:
http://guides.rubyonrails.org/configuring.html#creating-rails-environments
答案 1 :(得分:0)
module App
module Config
@@config= {env:"dev"}
def self.config
@@config
end
end
end
App::Config.config #=> {:env=>"dev"}
答案 2 :(得分:0)
最好只使用单个app-config.rb
并将配置变量放在yaml文件中,就像rails一样。否则你有严重的重复代码。
# production.yml
user: mdmoskwa
secret_key: abcd1234
此外,由于您可能想要真正的单身行为,因此最好使用以下模式:
# app_config.rb
module Config
def self.config
@config ||= YAML.load_file("/path/to/configs/#{Rails.env}.yml")
end
end
# to use your config variables
user = Config.config["user"]