與this question有關,它解釋了控制器中邏輯的起源,在推遲到github並重新部署之前,我有一個延遲作業背景作業的問題。這是對Delayed Job,Rails和Mandrill的預期行爲嗎?
的型號和範圍的工作,在控制器(一個或多個)邏輯的作品,在電子郵件text.erb文件的工作條件語句,用戶要麼是讀者或用戶,可以設置自己的電子郵件偏好他們的「我的帳戶」頁面:[文章&更新,只是文章,沒有電子郵件等]。延遲作業在後臺進行設置和處理,使得前端儘可能快速,並且Mandrill SMTP可以正確接收並正確地發送電子郵件。
在article_controller主要邏輯塊這樣做是爲了正確的電子郵件發送給正確的用戶:
if @article.update(article_params) && @article.status == 'published' && @article.created_at.today?
User.wantsarticles.editor.each do |user|
ArticleMailer.delay.send_article_full(@article, user)
end
User.wantsarticles.subscribers.each do |user|
ArticleMailer.delay.send_article_full(@article, user)
end
User.wantsarticles.readers.each do |user|
ArticleMailer.delay.send_article_teaser(@article, user)
end
format.html { redirect_to :action => 'admin', notice: 'Article was successfully updated.' }
format.json { render :show, status: :ok, location: @article }
else
format.html { redirect_to :action => 'admin', notice: 'Article was successfully updated.' }
format.json { render :show, status: :ok, location: @article }
end
縱觀Rails和延遲作業日誌,雖然與測試集的剛幾個用戶(5-10)中,當循環通過所述邏輯並決定3電子郵件需要被髮送出去,滑道是做3個INSERT INTO DJ臺和DJ然後執行此爲每一個:
Job NewsitemMailer.send_article_full (id=21) RUNNING
Job NewsitemMailer.send_article_full (id=21) COMPLETED after 0.8950
然後當它完成後,我牛逼報告回來了:
3 jobs processed at 0.9039 j/s, 0 failed
而在山魈日誌,發送的每封郵件都有自己的API「成功/失敗」的條目。
所以:這是延遲作業的正確/預期的行爲?是否應該爲每封電子郵件創建一份工作?或以不同的方式處理它們?當我們開始做X千而不是十/三時,這種做法是否會破壞服務器?
謝謝KM!是的,這只是一個簡單的開始,讓事情繼續下去,並瞭解這些事情是如何工作的。我們將看到它對服務器的作用。我們一定會考慮你稍後提到的其他選項。 –