Redis
 sql >> Base de données >  >> NoSQL >> Redis

Redis pub/sub sur rails

La mise en œuvre de Redis#subscribe est une boucle qui prendra le contrôle du thread courant afin d'écouter les événements. Cela signifie que le processus de démarrage est interrompu lors de la suppression d'un abonnement dans le contexte d'une classe Rails de la manière que vous avez montrée.

Vous pouvez essayer d'encapsuler l'appel dans un thread, mais cette approche créerait littéralement un nouvel abonnement chaque fois que cette classe serait chargée dans un nouveau processus, comme une console rails ou plusieurs licornes. De plus, vous devez faire attention à l'état partagé et aux autres problèmes de thread. Ce n'est probablement pas ce que vous voulez.

Il est préférable de démarrer un processus différent qui charge l'environnement rails et s'abonne à redis séparément du ou des processus servant les requêtes Web. Il peut s'agir d'une tâche de rake comme celle-ci :

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