的实现
Redis#subscribe是一个循环,它将采取对当前线程的控制以侦听事件。这意味着,当按照您显示的方式将订阅拖放到Rails类的上下文中时,引导过程将停止。
您可以尝试将调用包装在线程中,但是这种方法将在每次将该类加载到新进程(如Rails控制台或多个独角兽)中时,实际上都会创建一个新的订阅。另外,您必须注意共享状态和其他线程问题。这可能不是您想要的。
最好启动一个不同的进程来加载Rails环境并与服务Web请求的进程分开预订Redis。可能是类似以下的rake任务:
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 endend


