Rails アプリで、Sucker Punch gem を使用して遅延ジョブを実行しています。Twilio を使用して、それぞれに SMS メッセージを送信するいくつかの電話番号をループしています。
Twilio の送信でエラーが発生した場合、レスキューで問題なくキャプチャできますが、エラー ページを表示する例外を発生させずにユーザーに通知する方法はありますか?
理想的には、それが発生したときにフラッシュ メッセージ (またはその他の通知) として表示されます。これを行う方法はありますか?
Rails アプリで、Sucker Punch gem を使用して遅延ジョブを実行しています。Twilio を使用して、それぞれに SMS メッセージを送信するいくつかの電話番号をループしています。
Twilio の送信でエラーが発生した場合、レスキューで問題なくキャプチャできますが、エラー ページを表示する例外を発生させずにユーザーに通知する方法はありますか?
理想的には、それが発生したときにフラッシュ メッセージ (またはその他の通知) として表示されます。これを行う方法はありますか?
のチャットで述べたように、Nick Veys
これに対する解決策は、データにある種の永続性を作成することです。
--
押す
あなたが探している機能は、ある種の「プッシュ」テクノロジー、特にPusher
. これにより、ユーザーにメッセージを表示する機能を提供する一連のファイル/設定を作成できます。
私は個人的に次のように設定します。
DelayedJob
要求を必要に応じて処理する- メッセージでエラーが発生した場合は、エラーを保存します
- プッシュ実装でユーザーにエラー メッセージを送信する
だから私はこれをします:
#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 サービスに接続し、サーバーから受信する更新を「リッスン」できるようにします。これは、上記のコードを使用してこれらの更新 (エラー メッセージ) を入力できる場合、ユーザーがアプリを操作するときにエラーをユーザーに送信できることを意味します。
プッシャー / プッシュ テクノロジーの詳細については、こちらをご覧ください。