ruby - 使用池时如何释放 Sequel 连接

标签 ruby postgresql sidekiq sequel

我在使用 Sequel gem 和 Postgres 时面临一些池化问题。 我相信我的 Sidekiq 作业不会从池中释放它们使用的连接。

启动 Sidekiq 时,我使用以下方式连接到数据库:

DB = Sequel.connect(db_uri, max_connections: 20)

我正在考虑一些 Sidekiq 中间件,如下所示:

module Middleware
  class SequelDisconnector
    def call(*args)
      yield
    ensure
      DB.release_active_pool_connection
    end
  end
end

我知道有DB.disconnect,但是它完全与数据库断开连接,对吗?我想确保我的工作人员释放其连接,同时不终止任何其他工作人员的连接。

有什么办法可以实现这一点,或者我的推理是否有某种缺陷?

最佳答案

首先,您需要了解您的工作线程不一定使用单个连接,而是可能使用许多不同的连接,除非您专门通过 Database#synchronize 将其限制为单个连接。或Database#transaction .

您不需要断开特定连接,因为预计连接将保留在 Sequel 的连接池中以供以后使用。您是否有理由认为应该断开连接并将其从池中删除?

关于ruby - 使用池时如何释放 Sequel 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39467410/

相关文章:

ruby - 如何在 Ruby 中同时读取和覆盖文本文件

php - 获取数据类型大小 PostgreSQL

ruby-on-rails - 测试环境中不调用 PostgreSQL 触发器(运行 RSpec 时)

ruby - 将 JS 文件注入(inject) capybara chrome headless

ruby-on-rails - Rails 迭代巨大的数据库表

ruby - 在 ruby​​ 脚本中使用代理 IP

database - 有没有办法为 Postgres 列强制执行特定的字符串结构?

mysql - rails : Sidekiq cannot find the created record

ruby-on-rails-4 - Rails 4.2:sidekiq 无法连接到 Redis(Errno::ECONNREFUSED),由 foreman 启动

ruby-on-rails - 如何调试卡在数据库事务中的 ruby​​ 进程?