wtorek, 19 maja 2009

Rake - multiple task execution / invocation

standardowo taski Rake dają się uruchomić tylko raz, ponowne ich wywołanie nic nie daje.
Problem z którym się spotkałem polagał na tym aby móc uruchomić pojedyńczy task z konsoli jak i wykonać serie pojedyńczych tasków z innego zadania rake. Poniższy przykład wszystko wyjaśni:

task :start do
$queue = Queue.new
$queue << start_jobs =""> [:working1, :working2] do
puts "start_jobs END"
end

task :working1 do
process_shop(1)
end

task :working2 do
process_shop(2)
end

def process_shop(worker_id)
while true do
shop_id = $queue.pop(false)
puts "[#{worker_id}]processing shop: #{shop_id}"
t = Rake::Task['shop_job']
t.reenable
t.invoke(shop_id, worker_id)
sleep 1
end
rescue
end

task :shop_job, [:shop_id, :worker_id] do |t, args|
puts " [#{args.worker_id}]hello from shop_job #{args.shop_id}"
end

Brak komentarzy:

Prześlij komentarz