0

私は、ワーカーがいくつかのジョブを実行する分散システムをプログラミングしています。ワーカーを開始するために、フォルダー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

モジュール名.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と、NoMethodError が発生します。<class:Worker>: undefined method config for ModuleName:Module (NoMethodError)

よく分からないので、この問題の解き方を教えてください!

4

1 に答える 1

1

modulename.rb では、worker.rb が必要なため、ruby はオフになり、そのファイル内のコードを実行します REDIS_POOLModulename.config

Modulename.configまだ定義されていません (modulename.rb の下部でのみ定義されているため、エラーが発生します。

おそらく、redis プールを遅延して作成するか、少なくとも構成が更新された後にのみ作成する必要があります。

于 2013-01-07T22:52:32.167 に答える