簡體   English   中英

Rails,ActionController :: Live,Puma:ThreadError

[英]Rails, ActionController::Live, Puma: ThreadError

我想將通知流式傳輸給客戶端。 為此,我使用Redis pup/subActionController::Live 這是我的StreamingController樣子:

class StreamingController < ActionController::Base
  include ActionController::Live

  def stream
    response.headers['Content-Type'] = 'text/event-stream'

    $redis.psubscribe("user-#{params[:user_id]}:*") do |on|
      on.pmessage do |subscription, event, data|
        response.stream.write "data: #{data}\n\n"
      end
    end
  rescue IOError
    logger.info "Stream closed"
  ensure
    response.stream.close
  end
end

這里是JS部分來監聽流:

var source = new EventSource("/stream?user_id=" + user_id);
source.addEventListener("message", function(e) {
  data = jQuery.parseJSON(e.data);

  switch(data.type) {
    case "unread_receipts":
      updateUnreadReceipts(data);
      break;
  }
}, false);

現在,如果我將某些內容推送到redis,客戶端將獲得推送通知。 所以這很好。 但是,當我點擊鏈接時,沒有任何事情發生。 Ctrl + C取消rails服務器(我使用puma)后出現以下錯誤:

ThreadError: Attempt to unlock a mutex which is locked by another thread

config.middleware.delete Rack::Lock添加到development.rb后可以解決問題,但是在推送到客戶端后我看不到任何控制台輸出。 config.cache_classes = trueconfig.eager_load = true是沒有選項的,因為我不希望每次開發時都重啟我的服務器。

還有其他解決方案嗎?

如果您想避免重新啟動服務器以獲取更改,那么我認為您需要運行多個進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM