RSpec:如何测试使用Parallel的方法(PG :: ConnectionBad错误)

six*_*bit 6 ruby parallel-processing rspec ruby-on-rails process

在我的应用程序中,我有几个Builder类,负责从外部API请求获取数据并构建/保存资源到数据库.我正在处理大量数据并实现了Parallel 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.
Run Code Online (Sandbox Code Playgroud)

以下是正在测试的代码示例:

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
Run Code Online (Sandbox Code Playgroud)

我已经对此进行了一些搜索,但谷歌的所有结果都与使用多个线程/进程有关,使测试套件运行得更快,这是一个不同的问题.

有关如何在不引起PG错误的情况下有效测试此问题的任何想法?我意识到我可能需要将某些东西排除在外但不太确定要存根什么但仍然有一个有意义的测试.

提前感谢任何可能提供帮助的人!

Dan*_*oak 1

您使用的数据库连接数是否超过为测试数据库配置的数量?也许尝试将其设置为等于脚本需求的池大小(看起来像 24)?

test: adapter: whatever host: whatever username: whatever password: whatever database: whatever pool: 24

请注意,您可能还想对默认的 ActiveRecord 连接池进行一些计算。这篇 Heroku 开发中心文章中提供了一些不错的信息。