2010-09-02 34 views
10

delay_job tại http://github.com/collectiveidea/delayed_job«Reply_job» của Rails có thực sự là nhiệm vụ không?

Có thể delay_job có khả năng thực hiện tác vụ cron không? Chẳng hạn như chạy một kịch bản mỗi tối lúc 1 giờ sáng. Hoặc chạy một tập lệnh mỗi 1 giờ.

Nếu không, đá quý phù hợp có thể làm điều đó là gì? Và nó có thể được theo dõi từ xa bằng cách sử dụng một trình duyệt, và có đăng nhập thành công và lỗi?

Trả lời

4

Tôi nghĩ cron là công cụ tốt hơn cho việc này so với delay_job. Tôi đã sử dụng nó trong một dự án trước đây, và nó thực sự vượt trội khi chạy ở nhiệm vụ trong nền hoặc tại một thời điểm cụ thể. Tuy nhiên, đối với các tác vụ định kỳ xảy ra vào những thời điểm thông thường, tôi nghĩ cron là công cụ tốt nhất.

Kiểm tra whenever (và Railscast) để dễ dàng lên lịch các công việc cron có thể chạy các tác vụ cào (hoặc tập lệnh shell hoặc shell) hoặc bạn có thể sử dụng các tác vụ cào để cập nhật mô hình của mình của bộ điều khiển bảng điều khiển xem xét các trạng thái khác nhau.

21

Tôi đã làm việc trên một dự án đã cố gắng sử dụng DelayedJob để lên lịch các mục trong tương lai. Nó hút.

Thay vào đó tôi khuyên bạn nên sử dụng đá quý bất cứ khi nào:

http://github.com/javan/whenever

Bất cứ khi nào là một đá quý Ruby cung cấp một cú pháp rõ ràng để xác định công việc cron. Nó xuất ra cú pháp cron hợp lệ và có thể thậm chí ghi tệp crontab của bạn cho bạn. Nó được thiết kế để hoạt động tốt với các ứng dụng Rails và có thể được triển khai với Capistrano. Bất cứ khi nào hoạt động tốt cũng độc lập.

Mã trông như thế này (từ github)

every 3.hours do 
    runner "MyModel.some_process" 
    rake "my:rake:task" 
    command "/usr/bin/my_great_command" 
    end 

    every 1.day, :at => '4:30 am' do 
    runner "MyModel.task_to_run_at_four_thirty_in_the_morning" 
    end 

    every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot 
    runner "SomeModel.ladeeda" 
    end 

    every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday 
    runner "Task.do_something_great" 
    end 

Here 's video railscast về cách sử dụng nó.

Và tương ứng ASCIICast.

+0

Tại sao/làm thế nào delay_job hút cho bạn? – sscirrus

+1

Tôi thấy rằng các công nhân DJ bị đóng băng liên tục, và họ rất khó để tiếp tục chạy. Tôi đã chuyển sang Sidekiq và không bao giờ nhìn lại. Thật hoàn hảo. Hoạt động hoàn toàn tuyệt vời. Tôi ước rằng công ty của tôi sẽ chia tiền để có thêm tính năng phụ của Sidekiq Pro chỉ vì nó rất tuyệt vời. – cpuguy83

+1

Nó không hút. Tôi cũng đã ở đó. – OneChillDude

2

Bất cứ khi nào hoạt động tuyệt vời.

Tôi cũng thích rufus-scheduler

/config/initializers/task_scheduler.rb 

Sau đó trong tập tin đó:

scheduler = Rufus::Scheduler.start_new 

scheduler.every("1m") do 
    DailyDigest.send_digest! 
end 

tôi ban đầu được tìm thấy này được đăng here

Tôi đã thử nó và nó hoạt động tốt.

cập nhật

Bây giờ tôi nhìn lại liên kết đó là công ty duy nhất mà tôi muốn làm việc. Họ đã thực hiện một số đá quý và thêm nhiều như vậy cho cộng đồng. Chưa kể họ có một đội ngũ rất lớn!

3

Bạn cũng có thể sử dụng đá quý Clockwork: https://github.com/adamwiggins/clockwork-rails-dj

Clockwork chạy như một daemon riêng biệt và có thể được sử dụng để kích hoạt công việc của bất kỳ loại mà một trong hai việc thêm vào một hệ thống xếp hàng công việc hoặc chạy ngay lập tức.

Sử dụng Delayed_Job cho những gì tốt cho hệ thống xếp hàng công việc có thể được phân phối trên nhiều nút (hoặc không). Sử dụng cái gì khác để thêm công việc vào hàng đợi vào đúng thời điểm.

Tôi đã sử dụng rake (hoặc runner)/cron/bất cứ khi nào đá quý để lên lịch cho công việc nền nhưng tôi thấy tải máy chủ của tôi quá cao vì tôi sẽ bị đánh liên tục với rake/runner tải môi trường đường ray. Nhân viên Delayed_Job là các trình tiện ích đường ray của bạn vẫn hoạt động để bạn không phải liên tục kích hoạt Rails mỗi lần thực hiện tác vụ nền.

-1

Tôi tạo ra một viên ngọc cho việc này:

https://github.com/sellect/delayed_cron

Nó hoạt động với sidekiq và delayed_job hiện. Tìm kiếm để thêm resque sớm. Tôi biết điều này hơi trễ một chút, nhưng nó thực sự là chính xác những gì bạn đang tìm kiếm.

+0

Đá quý delay_cron không hoạt động chính xác với delay_job kể từ ít nhất 2014-03-06. Ngay cả sau khi sửa DelayedCron :: Jobs :: DelayedJob # thực hiện gem vẫn không hoạt động chính xác: các công việc cron với một khoảng thời gian không được lên lịch lại (cho dù công việc đã hoàn tất thành công hay chưa). – cydparser

+0

@cydparser Cá nhân tôi không sử dụng delay_job làm bộ xử lý nền với delay_cron, tôi thích sidekiq hơn. Tuy nhiên, đã có bản cập nhật cho lớp DelayedJob bên trong của delay_cron trong các phiên bản 0.2.2 và 0.2.3. Bạn đang sử dụng phiên bản đá quý nào? Dù bằng cách nào tôi có kế hoạch để cập nhật delay_cron để sử dụng ActiveJob của Rail để trừu tượng các bộ điều hợp công việc để tương thích với các bộ xử lý nền khác nhau không phải là một vấn đề trong tương lai. – jGRUBBS

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