ruby-on-rails - RSpec:如何测试使用并行的方法(PG::ConnectionBad 错误)

标签 ruby-on-rails ruby rspec process parallel-processing

在我的应用程序中,我有几个生成器类,它们负责获取从外部 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/

相关文章:

ruby-on-rails - Ruby 哈希加密

javascript - 如何使用 JQuery 关闭此对话框?使用 CoffeeScript ?

ruby-on-rails - 生成 422 错误的错误页面

ruby-on-rails - 如何从字符串转换为对象属性名称?

ruby - 没有 rails 的 rspec - 未初始化的常量

ruby-on-rails - Docker(docker-compose)应用程序容器中的 LetsEncrypt 不起作用

php - 简单的多语言 CMS?

ruby-on-rails - 一次循环遍历 2 个模型对象

javascript - 在启用 js 的情况下运行 capybara 测试时不呈现 CKEditor

ruby-on-rails - 在为 rspec 测试禁用回调后,如何重新启用回调?