为什么我得到一个NoMethodError与这个Ruby模块



我正在编程一个分布式系统,其中工作人员执行一些工作,为了启动工作人员,启动了init.rb,它加载lib文件夹并执行一些配置。

结构
init.rb
lib
|-- modulename
|   |-- foo.rb
|   |-- configuration.rb
|   `-- worker.rb
`-- modulename.rb

init.rb

$LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))
require "bundler/setup"
require "modulename"
ModuleName.configure do |c|
    c.log       = "module.log"
    c.pool_size = 10
end

modulename.rb

require "sidekiq"
require "modulename/foo"
require "modulename/configuration"
require "modulename/worker"
module ModuleName
    def self.config
        @config ||= Configuration.new
    end
    def self.configure
        yield(config)
    end
end

worker.rb

module ModuleName
    class Worker
        include Sidekiq::Worker
        REDIS_POOL = ConnectionPool.new(:size => ModuleName.config.pool_size, :timeout => 3) { Redis.new }
        def dosomething
            # ...
        end
    end
end

如果我现在运行ruby init.rb,我得到一个noomethoderror: <class:Worker>: undefined method config for ModuleName:Module (NoMethodError)

我真的不明白为什么,请给我一个提示如何解决这个问题!

In modulename。你需要工人。所以ruby开始运行该文件中的代码,包括您设置REDIS_POOL的位,它试图调用Modulename.config

Modulename.config还没有定义(您只在modulename的底部定义)。

你可能只想惰性地创建redis池,或者至少在配置更新后。

最新更新