gpt4 book ai didi

ruby-on-rails - Rails、ActionController::Live、Puma:ThreadError

转载 作者:IT王子 更新时间:2023-10-29 05:58:37 24 4
gpt4 key购买 nike

我想将通知流式传输到客户端。为此,我使用 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:尝试解锁被另一个线程锁定的互斥锁

在development.rb中添加config.middleware.delete Rack::Lock后问题可以解决,但是推到客户端后看不到任何控制台输出。 config.cache_classes = trueconfig.eager_load = true 不是选项,因为我不想在开发中每次都重新启动我的服务器。

还有其他解决办法吗?

最佳答案

如果您想避免重新启动服务器以获取更改,那么我认为您需要运行多个进程。

关于ruby-on-rails - Rails、ActionController::Live、Puma:ThreadError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27165291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com