Tôi đang lập kế hoạch một công việc để chạy trong nói, 10 phút. Cách hủy đúng công việc cụ thể này mà không cần sử dụng bất kỳ loại trường thừa nào trong mô hình và vân vân. Có bất kỳ cuộc gọi nào để xóa công việc cụ thể hoặc các công việc liên quan đến mô hình cụ thể, ví dụ, v.v. không?Làm cách nào để hủy công việc đã lên lịch với delay_job trong Rails?
Trả lời
từ chối trách nhiệm: Tôi không phải là một người sử dụng chuyên gia của delayed_job ...
"? Có bất kỳ cuộc gọi để loại bỏ công việc cụ thể, hoặc các công việc liên quan đến mô hình cụ thể, chẳng hạn, vv"
Chậm :: Công việc chỉ là đối tượng ActiveRecord để bạn có thể tìm và hủy bất kỳ bản ghi nào. Tùy thuộc vào trường hợp sử dụng của bạn, điều này có thể được xử lý theo nhiều cách khác nhau. Nếu ai đó sẽ tự hủy chúng, điều này có thể được xử lý thông qua giao diện quản trị trong ứng dụng web của bạn.
# list all jobs
Delayed::Job.all
# find a job by id
job = Delayed::Job.find(params[:id])
# delete it
job.delete
nếu bạn cần một số quy trình xóa công việc bằng 'loại công việc', bạn có thể lặp lại từng công việc và xóa nó nếu nó phù hợp với công việc của bạn; thử điều này trong kịch bản/console
class MyJob < Struct.new(:some_value);
def perform
# ...
end
end
my_job = MyJob.new('xyz')
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob"
job.handler
# => "--- !ruby/struct:MyJob \nsome_value: xyz\n"
để trao trên nếu bạn muốn xóa tất cả các công việc của loại MyJob
Delayed::Job.all.each do |job|
if job.name == "MyJob" then
job.delete
end
end
này có thể hoặc không có thể giúp cho tình hình của bạn? trong nhiều trường hợp, bạn có thể muốn xóa MyJob nhưng chỉ ở nơi thuộc tính: some_value là 'abc' chứ không phải 'xyz'. Trong trường hợp này, bạn có thể cần phải thực hiện một 'display_name' trên đối tượng MyJob của bạn. job.name sẽ sử dụng điều này nếu nó tồn tại
class MyJob < Struct.new(:user_id);
def perform
# ...
end
def display_name
return "MyJob-User-#{user_id}"
end
end
# store reference to a User
my_job = MyJob.new(User.first.id) # users.id is 1
job = Delayed::Job.enqueue(my_job, 0, 1.hour.from_now)
job.name
# => "MyJob-User-1"
job.handler
# => "--- !ruby/struct:MyJob \nuser_id: 1\n"
theo cách này bạn có thể chọn lọc hơn về những bản ghi cần xóa?
hy vọng điều này sẽ cung cấp cho bạn đủ thông tin về các cách có thể để xử lý?
delay_job 3 giới thiệu thuộc tính queue
. Điều này có thể bị tấn công để lên lịch cho công việc có thể hủy.
class MyJob < Struct.new(:user_id)
def self.queue_name
"something-unique"
end
def perform
# ...
end
end
#scheduler
my_job = MyJob.new(User.first.id)
#'cancel' pending jobs first
Delayed::Job.where(queue: my_job.class.queue_name).destroy_all
#queue it up
Delayed::Job.enqueue(my_job,
queue: my_job.class.queue_name,
run_at: 1.hour.from_now
)
Tôi thực sự không khuyên bạn nên làm những việc theo cách này. The'queue' có nghĩa là để cho phép ứng dụng mở rộng. Bạn đã trải qua một Struct tùy chỉnh, chỉ cần chọn một tên thuộc tính khác mà house9 đã làm. – Dex
- 1. Cách lên lịch công việc để bắt đầu mỗi giờ
- 2. Làm cách nào để liệt kê các công việc đã lên lịch chạy trong cơ sở dữ liệu của tôi?
- 3. Rails + Devise + delay_job?
- 4. Làm thế nào để cron lên lịch nội bộ công việc?
- 5. Làm thế nào để thực hiện một back-off với Microsoft PPL trọng lượng nhẹ công việc lên lịch?
- 6. Lập lịch vào một thời điểm cụ thể với công việc bị trì hoãn
- 7. Làm cách nào để hủy đăng ký công việc CRON trong AppEngine?
- 8. Cần lịch trình công việc trong asp.net
- 9. Làm thế nào để lên lịch một công việc mỗi thứ năm bằng cách sử dụng Kue?
- 10. Làm thế nào để lên lịch một công việc gói SSIS trong SQL sheduler hoặc Windows scheduler?
- 11. Cách duy trì lịch sử công việc bằng cách sử dụng Lịch hẹn Quartz
- 12. bị trì hoãn công việc cho Rails trên Windows?
- 13. Làm cách nào để làm mới "Công việc" trong Eclipse?
- 14. Cách tốt nhất để lên lịch tác vụ gửi email bằng Ruby on Rails là gì?
- 15. Lên lịch công việc trong Gearman cho một ngày và giờ cụ thể
- 16. Tôi đăng ký công việc lên lịch rq trong ứng dụng Django ở đâu?
- 17. Lắng nghe các sự kiện lên lịch công việc trong C#
- 18. Xây dựng lịch biểu công việc cron
- 19. Heroku - cách bắt đầu công việc làm (công việc bị trì hoãn)?
- 20. Làm cách nào để tách công nhân thành các nhóm công việc có công việc bị trì hoãn + heroku?
- 21. Việc làm với Resque cung cấp cho công việc "Không biết cách xây dựng công việc": công việc '"trên Heroku
- 22. Làm cách nào để lên lịch nhập dữ liệu trong Solr
- 23. Làm thế nào để sử dụng delay_job để làm cho Rails 3.0 ActionMailer chạy không đồng bộ? Gặp ArgumentErrors
- 24. Rails hủy xác nhận với Jquery AJAX
- 25. Làm thế nào để lên lịch các luồng Java
- 26. Phân bổ công việc lên lịch, quản lý và báo cáo
- 27. Django & Celery: Làm cách nào để lên lịch một công việc chỉ chạy một lần bằng Celery (tương tự như lệnh "at" trong linux)?
- 28. Cách tạo trạng thái công việc Jenkins bị hủy bỏ
- 29. Làm thế nào để hủy bỏ một sự tiếp tục của công việc?
- 30. Hiển thị partials/view trong một công việc/công việc trên nền/rake trong Rails 4
Giải pháp hoàn hảo! – mdrozdziel
Có lẽ bạn nên sử dụng "hủy" thay vì "xóa". –
Chết tiện dụng, cảm ơn câu trả lời thực sự chi tiết. + –