2010-09-02 68 views

回答

4

我認爲cron是比delayed_job更好的工具。我之前在一個項目中使用過它,它確實擅長在後臺或特定時間執行任務。但是,對於定期發生的重複性任務,我認爲cron是最好的工具。

檢出whenever(及其Railscast)可輕鬆調度可執行rake任務(或thor或shell腳本或其他任務)的cron作業。您可以使用rake任務來更新模型,然後進行某種排序儀表板控制器可以查看各種狀態。

21

我參與了一個嘗試使用DelayedJob來安排未來項目的項目。它吸了。

相反,我建議你使用每當寶石:

http://github.com/javan/whenever

當是一個Ruby的寶石,提供了定義cron作業一 清晰的語法。 它輸出有效的cron語法,並且可以爲您編寫您的crontab文件。 它被設計成可以和Rails 應用程序一起使用,並且可以與 Capistrano一起部署。每當獨立工作時也可以很好地工作 。

代碼如下所示(從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的關於如何使用它RailsCast視頻。

和相應的ASCIICast

+0

爲什麼/ delayed_job是如何吸引你的? – sscirrus 2011-10-09 23:06:22

+1

我發現DJ工作人員不斷凍結,他們很難繼續跑步。 我已經切換到Sidekiq並從未回頭。這是完美的。絕對出色的作品。我希望我的公司能夠爲Sidekiq Pro的附加功能付出代價,僅僅因爲它太棒了。 – cpuguy83 2013-01-07 15:29:03

+1

它確實很爛。我也去過那裏。 – OneChillDude 2014-10-01 20:42:12

2

每當工作很好。

我也很喜歡rufus-scheduler

/config/initializers/task_scheduler.rb 

然後在該文件中:

scheduler = Rufus::Scheduler.start_new 

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

我最初發現這個貼here

我已經嘗試過了,效果很好。

更新

現在我回頭看這個鏈接它幾乎是唯一軌道公司,我想爲之工作。他們製作了許多寶石,併爲社區增加了很多。更何況他們有一個龐大的團隊!

3

您也可以使用發條寶石: https://github.com/adamwiggins/clockwork-rails-dj

發條可以作爲獨立的後臺程序,可以用來觸發任何類型的,要麼被添加到該職位一個工作排隊系統或馬上運行。

使用Delayed_Job可以分配多個節點(或不是)的作業排隊系統。 使用其他方法在適當的時間將作業添加到隊列中。

我正在使用rake(或runner)/ cron /每當寶石安排後臺任務,但發現我的服務器負載非常高,因爲我會不斷用rake/runner加載rails環境。 Delayed_Job工作人員是您的rails守護進程保持運行,所以每次需要後臺任務時都不會不斷啓動Rails。

-1

我創建了這個寶石:

https://github.com/sellect/delayed_cron

它與sidekiq和delayed_job的目前。希望儘快添加resque。我知道這有點晚,但它確實和你要找的東西差不多。

+0

自2014-03-06起,delayed_cron gem與delayed_job無法正常工作。即使在修復DelayedCron :: Jobs :: DelayedJob#之後,執行gem仍然無法正常工作:具有間隔的cron作業不會重新計劃(無論作業是否成功完成)。 – cydparser 2015-04-03 01:39:11

+0

@cydparser我個人不會使用delayed_job作爲delayed_cron的後臺處理器,我更喜歡sidekiq。但是,版本0.2.2和0.2.3中的delayed_cron類中的DelayedJob類已更新。你使用的是哪個版本的寶石?無論哪種方式,我計劃更新delayed_cron以使用Rail的ActiveJob來抽象作業適配器,以便與將來的不同背景處理器兼容不應成爲問題。 – jGRUBBS 2015-04-10 08:34:58