提前感谢您的友好回复。
在工作中,我们使用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 的作者告诉我,代码显然没有问题,并建议增加池大小。我将使用这种方法,如果错误仍然存在,我们将更改代码的某些部分以不使用吸盘冲头。