Tôi đang sử dụng Rails 4.2 và delay_job 4.0.6 làm phụ trợ ActiveJob của tôi.Trong Rails 4.2 kiểm tra xem một công việc đã được enqueued
Tôi có một công việc mà tôi muốn chỉ cho phép trong hàng đợi một lần. Công việc được đề cập mất hơn một phút để chạy. Nó được enqueued bởi một cuộc gọi lại trên một mô hình. Cuộc gọi lại sẽ kích hoạt thường xuyên hơn nhiều so với công việc có thể được hoàn thành. Công việc không cần phải xếp hàng nhiều lần trong tương lai.
Dưới đây là một số mã giả cho những gì tôi đang cố gắng hoàn thành.
# app/jobs/refresh_account_cache_job.rb
class RefreshAccountCacheJob < ActiveJob::Base
def before_enqueue
skip if job_already_enqueued
end
def perform
Account.write_to_cache
end
def job_already_enqueued
# ?
end
end
Nếu một ví dụ của công việc đang chạy khi được gọi lại, nó vẫn phải được đặt trong tương lai. Tôi đang tìm một cách để có được công việc enqueued cho một hoạt động trong tương lai tối đa là 1 lần.
Tôi giả định rằng câu trả lời sẽ phải cụ thể đối với delay_job, nhưng nếu nó có thể được khái quát hóa thành ActiveJob thì sẽ tốt hơn.
Bạn có thể sử dụng redis không? Như trong, bạn có nó được cài đặt trên ngăn xếp của bạn? –
Tôi cần gắn bó với Postgres về dự án này. –
Không yêu cầu bạn thay thế nó, nhưng nếu bạn có thể sử dụng redis cùng với Postgres, có thể có một giải pháp đơn giản. –