私はイベントのチケットを予約するためのRailsアプリケーションを作成しています。15分後にRailsでタスクを実行
ユーザーが購入したいチケットを選択すると、彼は15分以内にチェックアウトを完了します。さもなければ、チケットは解放され、他の誰かによって予約することができます。
チケットを15分間「ブロック」して15分後に再び利用できるようにするにはどうすればよいですか?
私はイベントのチケットを予約するためのRailsアプリケーションを作成しています。15分後にRailsでタスクを実行
ユーザーが購入したいチケットを選択すると、彼は15分以内にチェックアウトを完了します。さもなければ、チケットは解放され、他の誰かによって予約することができます。
チケットを15分間「ブロック」して15分後に再び利用できるようにするにはどうすればよいですか?
あなたのチケットモデル(または使用しているモデル)にステータスフィールドを持ち、ユーザーがそれを選択すると、それは「部分予約済み」と表示されます。
あなたがsidekiqを使用している場合は、「your_method_here」または「YourWorker」の予約が完了したかどうかをチェックするためのロジックが含まれています
YourWorker.perform_in(15.minutes, ticket_id)
を
handle_asynchronously :your_method_here, :run_at => Proc.new { 15.minutes.from_now }
遅れジョブを使用している場合、または完了していない場合は未割り当てとしてマークします。
ActiveJob
は、バックグラウンドで仕事をするのに役立ちます。 ActiveJob
を使用すると、遅延操作のジョブを生成し、後で実行できるようにエンキューできます。ブール値フィールドをreserved
のようにモデルに追加し、ユーザーが最初に予約してバックグラウンドジョブを実行したときにtrueにして、15分後にユーザーが購入を完了しない場合はfalseに戻します。
TicketJob.set(wait_until: 15.minutes.from_now).perform_later(@ticket)
アクティブジョブは、ジョブを宣言し、さまざまなキューバックエンドで実行するためのフレームワークです。 ActiveJob
のバックエンドを設定するには、DelayedJobをご覧ください。それは簡単で十分です。
ActiveJob(Railsのビルトイン)とDelayedJob/Sidekiq/Resqueの違いは何ですか? –
'ActiveJob'は、DelayedJob、Resque、またはsidekiqのようなバックエンドを処理する標準的なラッパーで、同じ方法でそれらすべてに対話することができます。たとえば、ジョブクラスを変更せずにバックエンドをいつでもResqueからSidekiqに変更できます。 –
購入を完了するための残り時間を表示したい場合は、[このような]予約モデル(https://image.ibb.co/dQvPgQ/Screen_Shot_1396_02_24_at_12_26_27.png)を作成し、現在の時間と予約created_at時間。 –
15分後にdelayed_jobを使用してタスクを実行できますか? – django
http://stackoverflow.com/questions/5494369/how-to-schedule-a-function-to-execute-at-a-future-time – Iceman