私は、データベースのPaymentsテーブルのXカラムが== '条件'であるときに電子メールを送信する最も簡単な方法を探してきました。基本的に私が望むのは、支払いを追加し、6ヶ月のような日付を設定することです。 6ヶ月が経過したら私はメールを送りたい。いつでもcronの仕事などを使うような多くのソリューションを見てきましたが、私のアプリケーションを軽く清潔に保つために、(おそらく外部ソースに頼らずにRailsを使って)最も簡単な方法を知りたいと思っています。私は、自動生成されたcreated_atを使って、x時間が経過したときを評価できると考えていました。Rails:Xが真のときにメールを送信する最も簡単な方法
1
A
答えて
2
「最も簡単な」方法は、ステートマシンと一緒にActive Jobを使用することです:
EmailJob.set(wait: 6.months).perform_later(user.id) if user.X_changed?
これに伴う問題は、ジョブがすぐに処理されませんので、キューがジョブを蓄積することです。スキャンするジョブが増え、より多くのメモリを占有しているため、パフォーマンス上の問題が発生する可能性があります。
この種のジョブには、Cronジョブが適しています。ホスティングプラットフォームによっては、これを処理するさまざまな方法があります。たとえば、HerokuにはHeroku Schedulerがあります。
this SO answerなど、cronを使用しないで繰り返しタスクをスケジュールする方法は他にもあります。
編集:私はかつて「fist_of_fury」と呼ばれていた宝石を使用しましたが、現時点では維持されておらず、運用環境でどのように機能するかわかりません。以下は、私はレールのプロジェクトでそれを使用する方法についていくつかのスニペットです:アプリでで
Gemfile
gem 'fist_of_fury'
設定/初期化子/ fist_of_fury.rbで
# Ensure the jobs run only in a web server.
if defined?(Rails::Server)
FistOfFury.attack! do
ObserveAllJob.recurs { minutely(1) }
end
end
/jobs/observe_all_job.rb
class ObserveAllJob
include SuckerPunch::Job
include FistOfFury::Recurrent
def perform
::Task.all.each(&:observe)
end
end
2
電子メールを送信するためにdbに列があるので、datetime
データ型にして、イベント支払いイベントが作成されるとすぐに電子メールの日付を設定できます。次に、レーキタスクを実行できます。
range = Time.now.beginning_of_day..Time.now.end_of_day
Payment.where(your_datetime_custom_column: range).each do |payment|
payment.user.send_email
end
このタスクはスケジューラから毎日実行できます。
関連する問題
- 1. Xcode:iOS TextFieldからデータをリモートデータベースに送信する最も簡単な方法
- 2. Evernote Webアプリケーションに通知を送信する最も簡単な方法は?
- 3. 最も簡単な方法
- 4. 最も簡単な方法
- 5. ホットメールの電子メールを読む最も簡単な方法
- 6. 作成と最も簡単な方法
- 7. 最も簡単な一連のjavascript/jQueryイベントの最新のものを守る最も簡単な方法
- 8. 簡単なPHPメールでメールを送信しない
- 9. 真のブーストを実装するもっとも簡単な方法:: asio :: async_read_until
- 10. mysqlクエリの結果を電子メールで送信する簡単な方法
- 11. DelphiからOutlook 2010のメールを作成する最も簡単な方法は?
- 12. ザイリンクスFPGAのMGTで信号を送信する最も簡単な方法は何ですか?
- 13. 最も簡単な方法 - Ruby on Rails
- 14. 最も簡単な方法realloc
- 15. 最も簡単な方法は、プログラム
- 16. 最も簡単な方法は、垂直
- 17. 最も簡単な方法は、Express
- 18. 最も簡単な方法は、
- 19. Windows用のプライベートインスタンスにファイルを転送する最も簡単で簡単な方法は?
- 20. jQuery/PHPメールで簡単に送信できますか?
- 21. Mandrillで電子メールを送信する簡単なPHP関数
- 22. Pythonで電子メールを送信する簡単なスクリプト
- 23. NSStringとintを連結する最も簡単な方法
- 24. dockerfileでファイルとディレクトリをコピーする最も簡単な方法
- 25. "トリガー"イベントを親に送信する簡単な方法は?
- 26. フォームの送信時にボタンを無効にする最も簡単な方法は?
- 27. Pythonで簡単なGUIを開発する最も簡単な方法
- 28. 簡単な3Dアイオスアプリを作成する最も簡単な方法
- 29. ループのために使用するロジック。最も簡単なものと最も簡単なもの
- 30. 非プログラマがWIPアプリケーションをテストする最も簡単な方法
6か月後にXが真であるとき、またはXがtrueに変わったとき、または支払いイベントから6ヶ月後のときにメールを送信しますか? – mgamba
支払いイベントから6ヶ月後に、「6ヶ月」はデータベースの列になり、変更される傾向があります。 – Dotol