Наследование внутри железных рабочих при использовании драгоценного камня iron_worker_ruby

Я рассматриваю возможность использования IronWorker в качестве проекта, чтобы его можно было легко масштабировать (ожидается высокий трафик с большим количеством фоновых заданий).

Чтобы оставаться СУХИМ, я пытаюсь определить рабочих с использованием наследования, но продолжаю получать следующую ошибку:

/usr/local/lib/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- base_worker.rb (LoadError)
    from /usr/local/lib/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /task/child_worker.rb:3:in `<top (required)>'
    from /task/runner.rb:344:in `require_relative'
    from /task/runner.rb:344:in `<main>'

Вот базовый рабочий класс:

#  app/workers/base_worker.rb
require 'net/http'
require 'uri'
require 'json'

class BaseWorker < IronWorker::Base
  attr_accessor :params

  # The run method is what IronWorker calls to run your worker
  def run
    data = custom_run(params)
    common_post_process(data)
  end

   def custom_run(params)
     #to be overwritten in the child class 
   end    

   def common_post_process(data)
      # some common post processing => DRY
      ....
   end       
end

А вот дочерний класс:

# app/workers/child_worker.rb 
require 'net/http'
require 'uri'
require 'base_worker.rb'

class ChildWorker  <  BaseWorker
  merge "base_worker.rb"

  def custom_run(params)
     #custom work
  end

end

Есть идеи, как это исправить?


person Dorian    schedule 09.11.2012    source источник


Ответы (2)



Если вы используете iron_worker_ng, также можно определить метод run. Этот метод будет вызываться при запуске IronWorker. Вы должны указать класс в файле .worker.

# child_worker.rb
class ChildWorker
  def run
    puts "doing the hard work"
  end
end

И файл child_worker.worker:

# child_worker.worker
runtime 'ruby'
name 'ChildWorker'
exec 'child_worker.rb', 'ChildWorker'
person hjblok    schedule 27.08.2013