Implementasi Redis#subscribe
adalah loop yang akan mengambil kendali dari utas saat ini untuk mendengarkan acara. Ini berarti proses boot dihentikan saat menghentikan langganan ke dalam konteks kelas Rails seperti yang Anda tunjukkan.
Anda dapat mencoba membungkus panggilan dalam utas, tetapi pendekatan ini benar-benar akan membuat langganan baru setiap kali kelas ini dimuat dalam proses baru, seperti konsol Rails atau beberapa unicorn. Plus, Anda harus berhati-hati tentang status bersama dan masalah threading lainnya. Ini mungkin bukan yang Anda inginkan.
Sebaiknya Anda memulai proses berbeda yang memuat lingkungan Rails dan berlangganan redis secara terpisah dari proses yang melayani permintaan web. Ini bisa menjadi tugas menyapu seperti berikut:
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