sql >> データベース >  >> NoSQL >> Redis

Redis +ActionController::ライブスレッドが死んでいない

    私が行ったばかりの解決策(@teegから多くを借りた)は問題なく機能しているようです(失敗テストはしていません)

    config / initializers / redis.rb

    $redis = Redis.new(:host => "xxxx.com", :port => 6379)
    
    heartbeat_thread = Thread.new do
      while true
        $redis.publish("heartbeat","thump")
        sleep 30.seconds
      end
    end
    
    at_exit do
      # not sure this is needed, but just in case
      heartbeat_thread.kill
      $redis.quit
    end
    

    そして、私のコントローラーで:

    def events
        response.headers["Content-Type"] = "text/event-stream"
        redis = Redis.new(:host => "xxxxxxx.com", :port => 6379)
        logger.info "New stream starting, connecting to redis"
        redis.subscribe(['parse.new','heartbeat']) do |on|
          on.message do |event, data|
            if event == 'parse.new'
              response.stream.write("event: parse\ndata: #{data}\n\n")
            elsif event == 'heartbeat'
              response.stream.write("event: heartbeat\ndata: heartbeat\n\n")
            end
          end
        end
      rescue IOError
        logger.info "Stream closed"
      ensure
        logger.info "Stopping stream thread"
        redis.quit
        response.stream.close
      end
    


    1. Mongodbでフィールドに値を掛ける

    2. Django CeleryElasticBeanstalkはそのようなプロセスエラーを監視していません

    3. Python + Memcached:分散アプリケーションでの効率的なキャッシング

    4. フィールド名ClassNameがmorphiaによってmongodbに挿入されています