簡體   English   中英

我可以在Rails應用程序中啟動和停止delayed_job工作程序嗎?

[英]Can I start and stop delayed_job workers from within my Rails app?

我有一個可以從delayed_job和一些后台處理中受益的應用程序。 問題是,我並不需要/希望delayed_job工作人員一直在運行。

該應用程序在共享托管環境和多個位置(針對不同用戶)運行。 此外,該應用程序沒有獲得大量使用。

有沒有辦法在某些操作/事件之后從我的應用程序啟動和停止處理作業(使用腳本或rake任務)?

你可以呼叫系統:

system "cd #{Rails.root} && rake delayed_job:start RAILS_ENV=production"

您可以更改delayed_job以更少檢查。 而不是5秒默認值,將其設置為15分鍾或其他東西。

如果你去阻止一個工人,你會獲得PID。 如果其他所有方法都失敗,你可以簡單地殺死-9 PID。

是的,你可以,但我不確定它會帶來什么好處。 你說你不希望工人一直在跑步 - 你有什么顧慮? 內存使用情況? 數據庫連接?

為了保持delayed_job對系統的影響較小,我只運行一個worker,並將其配置為大部分時間處於休眠狀態。

Delayed::Worker::sleep_delay = 60 * 5  # in your initializer.rb

一名工作人員只會每隔5分鍾醒來並檢查數據庫是否有新工作。 以這種方式運行可以防止“定制”太多。

但是如果你真的想以編程方式啟動一個Delayed::Worker ,那么在該類中查找work_off ,並實現自己的script/run_jobs_and_exit腳本。 它應該看起來很像script/delayed_job - 3行。

我發現這是因為我正在尋找一種方法來運行一些后台工作,而不需要花費所有的錢來不斷地運行它們。 有人使用谷歌應用程序引擎來運行后台作業:

http://viatropos.com/blog/how-to-run-background-jobs-on-heroku-for-free/

雖然它有點過時了。 線程中有一個有趣的評論:

“當我需要發送電子郵件,復制文件等時,我基本上將它添加到隊列中。在每個請求結束時,它會檢查隊列中是否有任何內容。如果是,那么它使用Heroku API來設置在一個完成任務的工人結束時,它檢查隊列中是否還有任何東西。如果沒有,那么它將工人設置回0。最終結果是后台工作人員將為在這里和那里幾秒鍾。我可以完成我需要的所有后台處理,月底的賬單很少能達到1小時的總工作量。即使沒有問題,我還要支付0.05美元的背景費用。處理。:)“

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM