1

Rails アプリで、Sucker Punch gem を使用して遅延ジョブを実行しています。Twilio を使用して、それぞれに SMS メッセージを送信するいくつかの電話番号をループしています。

Twilio の送信でエラーが発生した場合、レスキューで問題なくキャプチャできますが、エラー ページを表示する例外を発生させずにユーザーに通知する方法はありますか?

理想的には、それが発生したときにフラッシュ メッセージ (またはその他の通知) として表示されます。これを行う方法はありますか?

4

1 に答える 1

1

のチャットで述べたように、Nick Veysこれに対する解決策は、データにある種の永続性を作成することです。

--

押す

あなたが探している機能は、ある種の「プッシュ」テクノロジー、特にPusher. これにより、ユーザーにメッセージを表示する機能を提供する一連のファイル/設定を作成できます。

私は個人的に次のように設定します。

  1. DelayedJob要求を必要に応じて処理する
  2. メッセージでエラーが発生した場合は、エラーを保存します
  3. プッシュ実装でユーザーにエラー メッセージを送信する

だから私はこれをします:

#Gemfile
gem 'aasm', '~> 3.3.3'
gem 'pusher', '~> 0.14.1'

#app/models/message.rb
class Message < ActiveRecord::Base
   include AASM

   aasm do
     state :queued, :initial => true
     state :sending
     state :delivered
     state :error

     event :sent do
       transitions :from => [:queued, :sending], :to => :sent
     end

     event :raise_error do
       transition :from => [:queued, :sending], :to => :error, :on_transition => Proc.new {|obj, *args| obj.set_message(*args) }
     end

     def set_message(message)
        self.update(error: message)
        Redis.lpush(self.user.id, self.id)
     end
   end

end

これは、メッセージを送信しようとすると、次のようにメッセージを更新できることを意味します。

@message = Message.find params[:id]
if [[message.send_error]]
    @message.raise_error(error.message)
end

これは、メッセージをRedis インスタンスに追加できることを意味し、これを Pusher で循環させることができます。

--

プッシャー

これの価値は、Pusher などのフロントエンド通知サービスを使用するときに、アプリケーションからデータを取得し、それをwebsocketまたはSSE経由でフロントエンド ブラウザーに送信することです。

これこそまさにあなたが必要としているものです。メッセージが発生したときに、ユーザーにメッセージを表示する機能です。これを行うには、次を使用します。

#app/assets/javascripts/application.js
pusher = new Pusher("**************")

channel = pusher.subscribe("private-user-[[username]]")             
channel.bind "error", (data) ->
    alert data.message

これにより、作成した Redis キューを処理できるようになり、要求された更新を作成時に送信できるようになります。

#app/workers/pusher.rb
class PusherQueue
   @queue = :pusher
   def self.perform(user, message)
       # push message here
   end
end

これは Pusher サービスに接続し、サーバーから受信する更新を「リッスン」できるようにします。これは、上記のコードを使用してこれらの更新 (エラー メッセージ) を入力できる場合、ユーザーがアプリを操作するときにエラーをユーザーに送信できることを意味します。

プッシャー / プッシュ テクノロジーの詳細については、こちらをご覧ください。

于 2014-08-30T12:53:40.587 に答える