Implementace Redis#subscribe
je smyčka, která převezme kontrolu nad aktuálním vláknem za účelem naslouchání událostem. To znamená, že proces spouštění se zastaví, když předplatné přenesete do kontextu třídy Rails způsobem, který jste ukázali.
Můžete zkusit zabalit volání do vlákna, ale tento přístup by doslova vytvořil nové předplatné pokaždé, když se tato třída načte v novém procesu, jako je konzola rails nebo více jednorožců. Navíc byste si museli dávat pozor na sdílený stav a další problémy s vlákny. To pravděpodobně není to, co chcete.
Nejlepší je začít s jiným procesem, který načte prostředí rails a přihlásí se k odběru redis odděleně od procesů, které obsluhují webové požadavky. Může to být úloha rake, jako je následující:
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