Redis#subscribe
の実装 イベントをリッスンするために現在のスレッドの制御を引き継ぐループです。これは、表示した方法でサブスクリプションをRailsクラスのコンテキストにドロップすると、ブートプロセスが停止することを意味します。
呼び出しをスレッドでラップすることもできますが、このアプローチでは、Railsコンソールや複数のユニコーンなどの新しいプロセスでこのクラスが読み込まれるたびに、文字通り新しいサブスクリプションが作成されます。さらに、共有状態やその他のスレッドの問題に注意する必要があります。これはおそらくあなたが望むものではありません。
Rails環境をロードし、Webリクエストを処理するプロセスとは別にredisにサブスクライブする別のプロセスを開始することをお勧めします。これは、次のようなレーキタスクである可能性があります。
namespace :subscribe do
task :redis => :environment do
$redis.subscribe("bravo") do |on|
on.message do |channel, message|
Rails.logger.info("Broadcast on channel #{channel}: #{message}")
OtherClass.some_method # yada yada
end
end
end
end