我在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'
答案 0 :(得分:0)
我用https://github.com/socialpandas/sidekiq-superworker/issues/23详细信息修复了它。这是由于名称空间上的sidekiq-superworker对话需要使用MyModule__MyWorker语法设置