Implementeringen av Redis#subscribe
är en loop som tar kontroll över den aktuella tråden för att lyssna på händelser. Detta innebär att uppstartsprocessen stoppas när du släpper en prenumeration i sammanhanget för en Rails-klass på det sätt du har visat.
Du kan försöka slå in samtalet i en tråd, men detta tillvägagångssätt skulle bokstavligen skapa en ny prenumeration varje gång den här klassen laddas in i en ny process, som en rails-konsol eller flera enhörningar. Dessutom måste du vara försiktig med delade tillstånd och andra trådningsproblem. Det här är förmodligen inte vad du vill.
Det är bäst att du startar en annan process som laddar rails-miljön och prenumererar på redis separat från processen/processerna som betjänar webbförfrågningar. Det kan vara en rake-uppgift som följande:
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