在我的应用程序中,我有几个生成器类,它们负责获取从外部 API 请求接收的数据,并将资源构建/保存到数据库中。我正在处理大量数据,并已实现并行 gem 以通过使用多个进程来加快处理速度。
但是,我发现对使用 Parallel 的方法的任何测试都会失败并出现相同的错误:
ActiveRecord::StatementInvalid:
PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
这是被测试的代码示例:
class AirportBuilder < Resource
def build_from_collection
Parallel.each(object_producer, in_processes: 24) do |params|
instance = Airport.find_or_initialize_by(fsid: params[:fs])
build!(instance, params)
end
end
end
我已经对此进行了一些搜索,但 Google 中的所有结果都与使用多个线程/进程来使测试套件运行得更快有关,这是一个不同的问题。
关于如何在不导致 PG 错误的情况下有效地测试它有什么想法吗?我意识到我可能需要对某些内容进行 stub ,但我不太确定要对哪些 stub 进行 stub ,但仍然需要进行有意义的测试。
提前感谢任何可能提供帮助的人!
最佳答案
您使用的数据库连接数是否超过为您的测试数据库配置的连接数?也许尝试将其设置为等于脚本需求的池大小(看起来像 24)?
测试:
适配器:随便
主持人:随便
用户名:随便
密码:随便
数据库:随便
游泳池:24
请注意,您可能还想对 the default ActiveRecord connection pool 做一些数学运算. this Heroku dev center article 中的一些有用信息.
关于ruby-on-rails - RSpec:如何测试使用并行的方法(PG::ConnectionBad 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31589643/