根据环境加载ruby配置文件

时间:2014-07-01 12:40:53

标签: ruby thor

我有以下文件夹结构

configs/    
-- dev/    
---- app-config.rb    
-- qa/    
---- app-config.rb    
-- prod/    
---- app-config.rb

所有app-config.rb都具有相同的结构,但配置值将不同

APP-config.rb

module App
  module Config
    @@config = {some hash configs}
  end
end

现在我正在使用 Thor 进行CLI,所以我的命令就像 thor add CONF
例如,thor add devthor add perf

所以取决于CONF param它应该读取app-config.rb并加载@@ config,然后我将在代码中使用。

但不知怎的,它不起作用,我正在

在App :: Config

未初始化的类变量@@ config

请建议任何设计达到相同目的。

提前致谢。

3 个答案:

答案 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"]