簡體   English   中英

如何讓用戶在Heroku上部署的Rails應用程序中創建計划任務

[英]How to have users create scheduled tasks in rails app deployed on Heroku

我在Heroku上部署了Rails應用程序。 我想添加一個功能,使應用程序的用戶可以設置提醒。 我需要某種方法讓應用程序安排在用戶指定的時間發送電子郵件。

我發現有很多帖子都提到要為此使用delay_job,但是我發現的任何文章/教程/等都沒有直接解決我要完成的工作(我發現的描述似乎更適合於管理長期運行的內容“無論何時”運行的作業。

我在正確的軌道上尋找這個的delay_job嗎? 如果是這樣,有人可以指出我的指導對我有幫助嗎?

如果delay_job不太適合這份工作,那么有人對我該如何處理提出建議嗎?

解決此問題的最典型方法是使用cron作業。 您將作業安排為每15分鍾左右運行一次,並提供該時間內出現的任何提醒。 不幸的是,heroku只允許cron作業每小時運行一次,這通常是不夠的。

在這種情況下,我將使用delayjob並誘使它設置一個定期執行的任務,該任務會根據需要頻繁地發送通知。 例如,您可以創建一個函數,該函數首先將其自身重新安排為在10分鍾內運行,然后繼續發送在前10分鍾內彈出的所有提醒。

要查看delayjobs send_at語法以安排將來的工作,請查看此處: https : //github.com/tobi/delayed_job/wiki

在注釋后添加:要發送提醒,您需要創建一個函數來搜索待處理的提醒並將其發送。 例如,假設您有一個稱為提醒的模型(Rails 3語法使我更喜歡它):

def self.find_and_send_reminders
 reminders = Reminder.where("send_at < ? AND sent = ?", Time.now, false).all
 reminders.each do |r|
   #the following delayed_job syntax is apparently new, and I haven't tried it.  came from the collective_idea fork of delayed_job on github
   Notifier.delay.deliver_reminder_email(r)
   #I'm not checking to make sure that anything actually sent successfully here, just assuming they did.  may want to address this better in your real app
   r.update_attributes!(:sent => true)
 end
 #again using the new syntax, untested.  heroku may require the old "send_at" and "send_later" syntax
 Reminder.delay(:run_at => 15.minutes.from_now).find_and_send_reminders
end

該語法假定您決定對每種發生方式都使用單個提醒條目。 如果您決定對所有重復提醒使用單個條目,則可以創建一個字段,例如“ last_sent”,而不是“ sent”的布爾值,然后使用該字段。 請記住,這些全都是想法,我實際上還沒有花時間去實現類似的東西,所以我可能沒有考慮所有的選擇/問題。

查看欠缺的寶石,可能對您有用: http : //runt.rubyforge.org/

您可以使用delay_job的run_at在特定時間而不是任何時間進行計划。

如果您的應用程序允許用戶更改提醒時間,則需要記住delay_job以便能夠對其進行更新或在需要時將其刪除。

是更多細節。

如果可以的話,最好避免輪詢。 工作線程將在數據庫級別進行輪詢,您不想在輪詢之上添加輪詢。

暫無
暫無

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

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