2012-03-13 43 views
12

我想找出在後臺運行腳本的最佳方法。我一直在環顧四周,發現了很多選擇,但是很多/大多數似乎在過去幾年中變得不活躍。讓我描述一下我的需求。最佳當前導軌背景任務方法?

Rails應用程序基本上是一個前端配置何時以及如何將這些腳本進行運行。腳本運行並生成報告併發送電子郵件警報。所以用戶必須能夠配置啓動時間以及這些腳本動態運行的頻率。腳本本身應該可以訪問rails環境,以便將結果報告保存在數據庫中。

只是想弄清楚從選項無數的最好方法。

+0

活躍工作怎麼樣?我剛讀過它,但看起來很有希望。 – akostadinov 2016-11-18 15:21:38

回答

12

我認爲你正在尋找一個後臺作業排隊系統。

爲此,您要麼尋找resquedelayed_job。兩者都支持將來某個時刻的調度任務--deferred_job本身就是這樣做的,而resque有一個叫做resque_scheduler的插件。

您將使用您指定的參數將作業置入後臺,然後在您選擇時執行它們。您可以將作業設置爲無限次或固定次數(至少使用resque-scheduler,不確定delayed_job)。

delayed_job的是更容易建立,因爲它在數據庫中保存的一切。 resque更健壯,但需要你在你的堆棧中使用redis,但是如果你已經做到了,它幾乎是解決問題的理想方案。

6

每當在https://github.com/javan/whenever時,請查看寶石。

它可以讓你安排像cron作業任務。

工作得非常好linux下,最後提交是14天前。我的一位朋友在一個項目中使用了它,並對此非常滿意。

編輯:看一下寶石delayed_job以及它在後臺執行長期任務。創建cron作業僅用於啓動其他任務時很有用。

+0

我看到了這個,但也許我不明白如何使用它,看起來像你靜靜地在schedule.rb文件中創建你的任務。那麼我可以在運行時修改我的工作嗎?基本上,我想要這個,但希望它可以從我的Rails應用程序由用戶配置。 – 2012-03-13 23:19:01

+0

簡單的解決方案是考慮用戶預定工作的最短時間。如果每小時執行所有掛起的作業就足夠滿足您的需求,那麼您可以讓每個小時或每十分鐘運行一個cron作業,遍歷未完成作業的列表,執行應該是的作業。這比嘗試'metaprogramatically'創建一個crontab或類似的東西要簡單得多。如果情況並非如此,那麼祝你好運:) – Castilho 2012-03-13 23:37:36

12

我最近了解到Sidekiq,我覺得它真的很棒。

還有一個關於它的RailsCast - Sidekiq