3

提前感谢您的友好回复。

在工作中,我们使用Sucker Punch gem 作为 Rails 应用程序来发送电子邮件和其他我们想要异步执行的操作。

我们实现了几个没有问题的演员,甚至成功地为他们编写了一些测试,使用推荐的配置(sucker_punch/testing/inline在规范中要求并使用截断作为数据库清理策略)。

一切都像魅力一样运作,直到我们决定实施的最后一个演员。它与其他没有什么不同,但是现在,在运行测试套件时,ActiveRecord::ConnectionTimeoutError它被提升了。

我在互联网上搜索了解决方案,但没有任何结果。大多数答案(如this one)建议使用ActiverRecord::Base.connection_pool.with_connection将块传递给它的方法。我们已经在这样做了。

我唯一能想到的是我们正在处理演员的错误,拯救异常,就像这样:

def perform
  ActiveRecord::Base.connection_pool.with_connection do
    begin
      ... # do something
    rescue SomeException => e
      ... # handle exception
    end
  end
end

但是从源头来看,这不是问题,因为with_connection可以确保发布它。

我将打开一个关于吸盘拳的问题,如果我有一些消息,我会更新这个问题。

有问题的版本可以等待,但这也让我想知道我们是否在生产中遇到同样的问题......

干杯,阿尔达娜。

编辑 gem 的作者告诉我,代码显然没有问题,并建议增加池大小。我将使用这种方法,如果错误仍然存​​在,我们将更改代码的某些部分以不使用吸盘冲头。

4

0 回答 0