gpt4 book ai didi

ruby-on-rails - 使用 ActionController::Live 流式传输在生产环境中不起作用

转载 作者:行者123 更新时间:2023-12-04 06:15:21 27 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 4.1,使用 ActionController::Live 从 Sidekiq 进程流式传输数据。在开发过程中,我的流媒体运行得非常好。在生产中(使用 Nginx/Puma),它的进展并不顺利。这是正在发生的事情。

在生产中,引用我的 Firebug 下图,“/events”被多次触发。 为什么我的EventSource被反复解雇而不是等待我的数据? 这在开发中不会发生。

Firebug EventSource

只要我的 Sidekiq 进程正在运行,它就会以随机间隔重复触发。一旦我的 sidekiq 进程完成,它就会挂起并且不再启动。然后最后一个最终会超时(参见图像中的红色文本)

这是我的 CoffeeScript :

source = new EventSource('/events')
source.addEventListener 'my_event', (e) ->
console.log 'Got a message!'
# Add the content to the screen somewhere

引用 Firebug 图像,它几乎就像在我的 Sidekiq 过程中超时一样。我正在从我的 worker 发布到 redis。

初始化器
REDIS = Redis.new(url: 'redist://localhost:6379')

Sidekiq worker
REDIS.publish('my_event', 'some data')

然后我有 EventSource 连接到的 Controller 操作:
def events
response.headers["Content-Type"] = "text/event-stream"
redis = Redis.new(url: "redist://localhost:6379")
# blocks the current thread
redis.subscribe(['my_event', 'heartbeat']) do |on|
on.message do |event, data|
if event == 'heartbeat'
response.stream.write("event: heartbeat\ndata: heartbeat\n\n")
elsif event == 'my_event'
response.stream.write("event: #{event}\n")
response.stream.write("data: #{data.to_json}\n\n")
end
end
end
rescue IOError
logger.info 'Events stream closed'
ensure
logger.info 'Stopping events streaming thread'
redis.quit
response.stream.close
end

同样,这在开发中 100% 非常棒。我来自 Sidekiq 的数据完美地传输到浏览器。上面心跳的东西是因为 this answer (我遇到过同样的问题)

有没有人看到我做错了什么?我错过了 ActionController::Live 的某种形式的设置吗?使用 Nginx/Puma 进行生产?

重要提示

在来自图像的每个请求的最后(它似乎超时并尝试执行下一个请求),我成功地获得了一行数据。所以似乎有些东西在起作用。但单 EventSource没有保持开放并监听数据的时间不够长,它只是不断重复。

最佳答案

我最近的一个项目也有类似的问题。我发现这是我的 nginx 配置。

将以下内容添加到位置部分:

proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;

此信息来自以下 Stack Overflow 讨论:

EventSource / Server-Sent Events through Nginx

希望这可以帮助。

关于ruby-on-rails - 使用 ActionController::Live 流式传输在生产环境中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27953026/

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