gpt4 book ai didi

ruby-on-rails - Rails 4 - Live,即使在刷新后连接也会继续

转载 作者:行者123 更新时间:2023-12-04 20:00:37 24 4
gpt4 key购买 nike

我已经制作了一个使用 Rails 4 中的 Live 方法的应用程序。但是,当我使用它时,每次刷新都会继续建立一个连接,直到它达到与数据库的最大连接数,然后才会挂起并永远加载。

我该怎么做才能确保在用户刷新网站或决定离开时断开连接?

这是我的设置:

  def events
response.headers["Content-Type"] = "text/event-stream"
redis = Redis.new
redis.psubscribe("participants.*") do |on|
on.pmessage do |pattern, event, data|
response.stream.write("event: #{event}\n")
response.stream.write("data: #{data}\n\n")
end
end
rescue IOError
logger.info "Stream closed"
ensure
redis.quit
response.stream.close
end

我使用 Nginx,搭配 Rainbows!在 Ubuntu 10.04 上。 ruby 2.0.0-p195PostgreSQL rails 4

最佳答案

因此,如果您在自己创建的线程中执行该逻辑,我的回答是,将所有内容包装在:

def events
ActiveRecord::Base.connection_pool.with_connection do
response.headers[etc
#..
end
end

现在,您不是在创建自己的线程。根据您的症状,我怀疑可能无论如何都能解决您的问题,看看会很有趣。

但是,这可能不是必需的,因为 ActionController::Live 是 Rails 的官方支持部分,并且文档和示例并未说明您应该必须执行 with_connection 操作。我不熟悉 ActionController::Live 自己;听起来这可能是一个错误。在创建一个尽可能小的应用程序来演示问题后,您可能想使用 Rails 问题跟踪器进行归档。

我怀疑您的应用程序中发生的事情比您向我们展示的要多——您向我们展示的方法根本没有使用 ActiveRecord,因此它没有理由使用任何数据库根本没有联系。或者等等,你所说的“数据库连接”是指 Redis 吗?如果是这样,那么请忽略整个答案,因为我假设是 ActiveRecord。我也没有使用 Redis 的经验,但如果“数据库连接”是指 Redis,那么这是一个 Redis 问题,您可能想尝试在 Redis 问题跟踪器上提交问题。或者,当然,至少将这个问题标记为“redis”,以便了解 redis 的人可能会看到它。

关于ruby-on-rails - Rails 4 - Live,即使在刷新后连接也会继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474821/

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