2011-09-06 27 views
8

Tôi muốn chạy một nhiệm vụ mỗi phút trên Heroku để kiểm tra xem các điều kiện có được đáp ứng để hết thời gian thực hiện các tác vụ nhất định của người dùng hay không. Tôi chỉ có thể chạy một công việc cron Heroku mỗi giờ, vậy cách tốt nhất để thiết lập một nhiệm vụ theo thời gian như thế này là gì. Tôi đang sử dụng Rails 3.1 trên Heroku.lập kế hoạch công việc mỗi phút Rails 3.1 trên Heroku

Trả lời

7

Bạn có thể sử dụng delayed_job với công việc tự khởi động lại với số :run_at. Một cái gì đó kiểu như thế này:

class YourJob 
    def do_interesting_things 
     #... Do what needs to be done. 
     self.delay(:run_at => 1.minute.from_now).do_interesting_things 
    end 

    def self.start_me_up 
     new.do_interesting_things 
    end 
end 

Và rồi đâu đó trong quá trình khởi của ứng dụng của bạn:

YourJob.start_me_up 
+0

cảm ơn bạn - tôi sẽ cố gắng hôm nay và nếu nó hoạt động tôi sẽ chấp nhận câu trả lời :-) –

+0

Điều này có hiệu quả không? Tôi cần phải chạy một công việc cào cứ mỗi 1 phút và tôi nghĩ rằng cần có một cách để làm cho nó chạy chính nó so với yêu cầu cron. Hiện tại cron trên heroku có tối đa mỗi giờ. – ylluminate

+0

@ylluminate: Tôi chưa bao giờ nghe lại nhưng nó sẽ hoạt động, hãy thử và cho tôi biết nó như thế nào. –

8

Tính đến hôm nay, bạn có thể ngọc lịch, clockwork. Heroku chính thức hỗ trợ điều này và bạn có thể tìm thấy tài liệu của họ here.

+0

Cảm ơn tuyệt vời –

+3

Chỉ cần lưu ý rằng [clockwork] (https://devcenter.heroku.com/articles/clock-processes-ruby) yêu cầu một dyno, vì vậy nó sẽ có giá giống như bất kỳ loại dyno nào khác (0,05 đô la mỗi giờ, có thể lập hoá đơn đến lần thứ hai - khoảng ** $ 35/tháng **). Những người * không * yêu cầu lên lịch "từng phút", nhưng vẫn ổn với * cứ sau 10 phút *, * mỗi giờ *, hoặc * mỗi ngày (tại một thời điểm cụ thể) *, sau đó xem xét [Lập lịch Heroku] (https : //addons.heroku.com/scheduler), một tiện ích bổ sung miễn phí. – user664833

+1

Một hạn chế khác của clockwork là nó chỉ có thể chạy trên một dyno đơn, vì vậy nếu bạn có nhiều công việc được lên lịch hơn một tiến trình có thể xử lý, giải pháp 'delay_job' sẽ hoạt động tốt hơn. – Leopd

Các vấn đề liên quan