1

我最近用 Configatron 替换了一个自制的配置模块,但我无法让一个用例正常工作。

当我尝试使用配置值作为 Object.const_get 的参数时,如下所示:

def formatter_class
  Object.const_get(configatron.formatter)
end

我收到以下错误:

file.rb:10:in `const_get': can't convert Configatron::Store to String 
  (Configatron::Store#to_str gives Configatron::Store) (TypeError)

配置器分配看起来像这样(简化):

configatron.formatter = case
                          when condition?
                            'ExportFormat'
                          else
                            'ScreenFormat'
                        end

即使我这样做configatron.formatter = 'ScreenFormat',我也会得到同样的错误。

我也尝试过这种formatter_class方法的变化。这失败了:

def formatter_class
  Object.const_get(configatron['formatter'])
end

当然,这成功了,但不会满足我的用例:

def formatter_class
  Object.const_get('ScreenFormat')
end

我究竟做错了什么?

4

2 回答 2

2

我解决了我的问题。原来你可以打电话,如果它没有初始化configatron.whatever,它会返回一个。Configatron::Store

configatron.has_key? 'formatter'我在访问该值之前插入了一个调用。当它返回 false 时,我发现错误发生在尚未初始化值的代码路径中。一旦我初始化了值,错误就不再发生了。

于 2014-11-13T16:13:50.323 回答
0

当 .yml 配置文件丢失时发生。或者您正在寻找的钥匙不存在。

地点: /config/NAME.yml

于 2020-08-18T21:45:37.293 回答