Tôi có một chức năng được đánh dấu để được xử lý không đồng bộ bằng cách delayed_job:Đi qua một khối đến một delayed_job
class CapJobs
def execute(params, id)
begin
unless Rails.env == "test"
Capistrano::CLI.parse(params).execute!
end
rescue
site = Site.find(id)
site.records.create!(:date => DateTime.now, :action => "Task Failure: #{params[0]}", :type => :failure)
site.save
ensure
yield id
end
end
handle_asynchronously :execute
end
Khi tôi chạy chức năng này tôi vượt qua trong một khối:
capjobs = CapJobs.new
capjobs.execute(parameters, @site.id) do |id|
asite = Site.find(id)
asite.records.create!(:date => DateTime.now, :action => "Created", :type => :init)
asite.status = "On Demo"
asite.dev = true
asite.save
end
tác phẩm này tốt khi chạy mà không có delay_job nhưng khi chạy với nó tôi nhận được lỗi sau đây
2012-08-13T09:24:36-0300: [Worker(delayed_job host:eagle pid:12089)] SitesHelper::CapJobs#execute_without_delay failed with LocalJumpError: no block given (yield) - 0 failed attempts
2012-08-13T09:24:36-0300: [Worker(delayed_job host:eagle pid:12089)] PERMANENTLY removing SitesHelper::CapJobs#execute_without_delay because of 1 consecutive failures.
2012-08-13T09:24:36-0300: [Worker(delayed_job host:eagle pid:12089)] 1 jobs processed at 0.0572 j/s, 1 failed ...
Có vẻ như không nhận khối này đã được thông qua. Đây không phải là cách đúng để làm điều này hay tôi nên tìm một phương pháp khác?
bạn có thể xin vui lòng gửi những gì mã bạn sử dụng? – brauliobo