Sidekiq超级工作者命名空间问题

时间:2014-06-22 01:19:34

标签: ruby-on-rails ruby sidekiq

我在rails引擎中有这个代码:

Superworker.create(:AJob, :a_id, :data) do
  AWorker :a_id, :data do
    parallel do
      BWorker :a_id, :data
      CWorker :a_id, :data
      DWorker :a_id, :data
    end
    EWorker :a_id, :data
  end
end

我面临的问题是工作人员在引擎命名空间下,而Superworker工厂不了解MyEngine :: AWorker表示法,如何解决? 使用以下方法将Workers路径添加到自动加载路径:

module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace MyEngine

    ENGINE_RAILS_ROOT = File.join(File.dirname(__FILE__), '..', '..')
    config.autoload_paths << File.expand_path(File.join(ENGINE_RAILS_ROOT, 'app', 'workers', 'my_engine'))

    require File.expand_path(File.join(ENGINE_RAILS_ROOT, 'app', 'jobs', 'superworkers'))
  end
end

可能是什么问题?

UPDATE1: 尝试向这样的工作人员添加名称空间时:

Superworker.create(:AJob, :a_id, :data) do
      MyEngine::AWorker :a_id, :data do
        parallel do
          MyEngine::BWorker :a_id, :data
          MyEngine::CWorker :a_id, :data
          MyEngine::DWorker :a_id, :data
        end
        MyEngine::EWorker :a_id, :data
      end
    end

我得到以下内容:

<top (required)>': undefined method `AWorker' for MyEngine:Module (NoMethodError)
        from /home/vagrant/.rvm/gems/ruby-1.9.3-p392/gems/sidekiq-superworker-0.1.8/lib/sidekiq/superworker/dsl_parser.rb:15:in `instance_eval'
        from /home/vagrant/.rvm/gems/ruby-1.9.3-p392/gems/sidekiq-superworker-0.1.8/lib/sidekiq/superworker/dsl_parser.rb:15:in `block in block_to_nested_hash'

1 个答案:

答案 0 :(得分:0)

我用https://github.com/socialpandas/sidekiq-superworker/issues/23详细信息修复了它。这是由于名称空间上的sidekiq-superworker对话需要使用MyModule__MyWorker语法设置