1

SSE を使用して、Stripe サブスクリプションの詳細を表示するページを更新する予定です。

基本的には次のようになります。

  1. サブスクリプションの詳細ページを読み込む
  2. ActiveJob ジョブを使用して、Stripe API からサブスクリプションの詳細をリクエストします
  3. タスクが終了したら、SSE を使用して、そのクライアント (サブスクリプション ページ) にページを更新することを通知します。
  4. JavaScriptを介して更新を実行します

ステップ 1 と 2 と 4 のコードをセットアップしましたが、#3 の実行方法がわかりません。

私が目にする問題の 1 つは、ActiveJob には実際に after_perform コールバックがありますが、Rails に組み込まれた SSE はコントローラー (ActionController::Live::SSE) に存在することです。after_perform コールバックで SSE コントローラーで何かを行う方法がわかりません。

グーグル、私は潜在的な解決策を見つけました:

  1. Sidekiq プラグインを使用して、タスクの完了を通知できるようにします。
  2. PostgreSQL NOTIFY / LISTEN を使用する

SSEコントローラーがタスクが実行されたことをどのように知るかなど、その後どうなるかはわかりません。

その他の注意事項:

バックグラウンド処理に Brandon Hilkert の Sucker Punch gem を使用しています: https://github.com/brandonhilkert/sucker_punch

また、PostgreSQL 専用のコードに固執することを強制しないソリューションも必要です。ただし、それが機能する唯一のアプローチであるかどうかは気にしません。

また、sucker_punch で実行できず、Sidekiq に切り替える必要がある場合に備えて、Sidekiq ソリューションも投稿しました。

何か案は?

ありがとう!

4

1 に答える 1

1

Rails 5 の Action Cable は、このタイプの機能のために構築されています。 https://github.com/rails/rails/tree/master/actioncable

Action Cable は、Web ソケットをレールにもたらします。これは、クライアントとサーバー間の永続的な接続を意味します。クライアント (javascript/coffescript) からアクションを実行し、json または html の部分的な更新をクライアントにプッシュすることができます。 v=n0WUjGkDFS0

で新しいチャンネルを生成しrails g channel、ブロードキャストの範囲を設定します

def subscribed
  stream_from "subscription_#{current_user.id}"
end

あなたの場合、ステップ1と2は同じままです。ステップ 3 の最後に、 を追加しActionCable.server.broadcast "subscription_#{current_user.id}", status: payment_statusます。ステップ 4. やりたいようにクライアントの状態を更新します。

于 2016-05-09T19:05:07.857 に答える