[英]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.