Implementeringen af Redis#subscribe
er en løkke, der vil overtage kontrol over den aktuelle tråd for at lytte til begivenheder. Dette betyder, at opstartsprocessen stoppes, når du dropper et abonnement i konteksten af en Rails-klasse på den måde, du har vist.
Du kunne prøve at pakke opkaldet ind i en tråd, men denne tilgang ville bogstaveligt talt skabe et nyt abonnement, hver gang denne klasse indlæses i en ny proces, såsom en rails-konsol eller flere enhjørninger. Derudover skal du være forsigtig med delt tilstand og andre trådeproblemer. Det er nok ikke det, du ønsker.
Det er bedst for dig at starte en anden proces, der indlæser rails-miljøet og abonnerer på redis adskilt fra den eller de processer, der betjener webanmodninger. Det kunne være en rake-opgave som følgende:
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