1

我正在構建一個應用程序,它會定期向用戶發送狀態請求(通過電子郵件&短信)。我想執行這將每個小時的服務:(基於某種邏輯)關於如何在Rails 3中編寫服務的建議

  • 查詢數據庫中需要發送的所有請求
  • 發送通過亞馬遜的簡單電子郵件服務的要求(這已經工作)
  • 寫狀態請求通知的記錄回數據存儲

我正在考慮這一系列的操作結束了與終點的單控制器,可以遠程調用揭開序幕的過程在rails應用程序中。從長遠來看,我會把這個過程分解成一個可以獨立於我的Rails應用程序運行的應用程序,但現在我只是試圖保持簡單。

我的第一傾斜是建立以下內容:用下列元素

  • 控制器:
    • 這將協調上面概述的步驟(和可以在外部調用)的方法
    • 的呼叫到status_request模型,它將帶回需要發送的請求集合
    • 循環遍歷待處理的請求,它將:
    • 讓我的AWS簡單的電子郵件服務模塊的調用實際發送電子郵件,並
    • 請對status_request模型調用登錄請求回數據庫
  • 型號:
    • 一我status_request模型方法,會帶回那些需要請求集合發送
    • 的方法,我status_request模型,它會記錄寄通知

由於這將作爲一個服務,從外部調度程序定期調用,我不認爲我需要一個視圖來執行此操作。 (當然,會需要視圖來向用戶和管理員顯示發送了什麼請求,但是後來......)。

作爲Rails的新手,我要求回顧一下這種方法以及您可能有的任何建議。

謝謝!

回答

1

而不是Jeff指出的控制器暴露了安全風險,您可能只想公開一個rake任務並使用cron來每小時調用一次。

如果您仍然對構建控制器感興趣,請查看devise gem及其單個訪問令牌token_authenticatable,以確保您公開的方法的安全。

您可能還想查看delayed_job或resque以將調用卸載到status_request,並將該循環轉換爲AWS簡單服務的後臺工作進程。

您可能需要一個單獨的控制器並查看日誌文件,以便您可以按需查看進度。

如果你想獲得真正看中的使用Amazon SNS向您發送警報,當服務達到失敗的一些不可接受的程度,積壓等

+0

在這裏做了一些關於delayed_job的閱讀:https://github.com/collectiveidea/delayed_job。偉大的寶石! – jn29098

1

由於您試圖從外部進程調用此方法,因此您的方法應該可行。你也可以有一個工作進程,當他們在那裏時處理任務。

您將需要路由來公開您的服務,並且您可能還需要做出安全決策。調用應用程序的服務將如何進行身份驗證,以便所有其他人無法按照要求進行身份驗證?

另一個考慮因素應該是您要發送多少封電子郵件。如果有足夠的空間,我們可能想研究一下這樣一個事實:編寫這種循環將會非常重要;如果它是一個Web應用程序,可能會影響當前系統上的用戶。

最後,有很多方法可以做到這一點。我會專注於您期望的性能/使用以及安全性。從來沒有一個完美的方式來解決這樣的問題,你的方式應該知道它需要在其內部運行的變量。

+0

謝謝,傑夫。關於確保終點的重要一點。需要成爲一個服務器位於網絡服務器的地方,我想確保我可以稍後分解出來,我很感謝你的回答, – jn29098

0

ResqueRedis可能會對你有所幫助的調度和執行化經營他們是簡單而超快的,[http://railscasts.com/episodes/271-resque]就是一個簡單的嘖嘖,

相關問題