2013-02-19 71 views
2

在我的Rails應用程序中,用戶可以訂閱一些事件。我想在活動開始前24小時向用戶發送郵件。在Rails應用程序中發送自動郵件

我不知道如何實現。一個耙子任務?是否有一些寶石或一些最佳實踐要遵循?

謝謝!

編輯:

我想,我的cron必須每分鐘運行一次,以獲取每個啓動24小時的事件。但是如果cron停止,或者需要一分多鐘,我不能跳過一些電子郵件。換句話說,我怎麼能確定我沒有兩次發送同一封電子郵件?

+0

你沒有嘗試將你的一些單詞輸入到谷歌中,是嗎? – pduersteler 2013-02-19 21:19:52

+0

可能的重複[一個cron作業的rails:最佳實踐?](http://stackoverflow.com/questions/285717/a-cron-job-for-rails-best-practices) – pduersteler 2013-02-19 21:20:16

+0

當然,我做了,但它不是同一個問題。請在downvoted之前嘗試理解!也許我必須澄清我的問題。這不是一個簡單的cron。我的cron必須每分鐘運行一次,以獲得24小時內開始的每個活動。但是,如果cron的停止,或需要超過一分鐘,我不能跳過一些電子郵件。換句話說,我怎麼能確定我沒有兩次發送同一封電子郵件? – 2013-02-19 21:26:27

回答

5

退房:

http://railscasts.com/episodes/206-action-mailer-in-rails-3

用於發送郵件和

http://railscasts.com/episodes/164-cron-in-ruby-revised

使用每當建立一個cron打電話給你的郵件

編輯:剛纔看到你評論。在這種情況下,我想看看使用類似resque調度或sidekiq等價的:

https://github.com/bvandenbos/resque-scheduler

那麼你可以做這樣的事情:

Resque.enqueue_at(24.hours.from_now, SendFollowUpEmail, :user_id => current_user.id) 

sidekiq例如:

FollowUpEmailer.perform_in(24.hours.from_now, current_user.id) 
+1

我已經使用sidekiq。事實上,我並不需要cron。我只需要在after_create中添加你的線,對吧?!如果用戶取消訂閱活動,是否有取消電子郵件的方法? – 2013-02-19 21:32:00

+0

我不認爲有一種方法見:https://github.com/mperham/sidekiq/pull/257,最後的評論有邁克說,你的工作應該檢查,看它是否應該被髮送。在這種情況下,我只需要:send_email如果user.subscribed?在我的工作 – rainkinz 2013-02-19 21:36:35

+0

應該很容易實現。非常感謝!唯一的缺點我看到的是,如果我的服務器崩潰或重新啓動,我失去了我的sidekiq隊列中的所有郵件... – 2013-02-19 21:41:17