2017-06-28 7 views
2

私はカスタムActiveRecordバリデーターを持っています。これは検証チェックの1つとしてネットワーク/ httpリクエストを行うべきです。それが実行されるかどうかは、渡された引数に依存します。それが実行されると、要求が失敗したり、時間がかかり、リモートサーバーがダウンしている可能性があります。Railsのカスタムバリデーターでhttpリクエストを受け取りました

したがって、非同期で送信する必要があります。そしておそらく、ユーザーはそれが完了するのを待つべきではありません。サーバーがダウンしている場合、ユーザーはどれくらい待つ必要がありますか?

同時に、私のバリデータは必須であり、検証されている限り、モデルはdbに保存できません。

したがって、どのように実装するのですか?同期におけるActiveRecordの検証。

答えて

4

あなたは理想的には非同期にする必要があります。ユーザーの全体の流れを再考する必要があります。

私の提案は、キューイングシステムを使用することです。ユーザーに自分のアカウントを保存させ、そのアカウントの確認が保留中である旨のメッセージを表示させ、電子メールで通知します。

一方、データをキューにプッシュし、キュー内のレコードを1つずつ処理して(つまり、サーバーに要求する)、検証します。検証に基づいて、アカウントを有効または無効にしてユーザーに電子メールを送信します。

+0

なぜキューではなく、サイドキックなどでですか? – Kona

+0

もし私が間違っていないのであれば、サイドキックは内部的にもキューを使います。 – aBadAssCowboy

+0

@Kona: "キュー"と "サイドキック"の違いは何ですか? –

関連する問題