Mysql2::Error: # MySQL 客户端未连接 — Rails 6.0.2.2 with rspec; Ruby 2.6.4 mac 操作系统 Catalina + Mojave

Jas*_* FB 9 ruby mysql rspec ruby-on-rails

我在 MySQL on Rails 6.0.2.2、RSpec 4.0.0.rc1、Ruby 2.6.4 上遇到了这个极其奇怪的间歇性问题

在两台独立的 Mac 上,一台运行 macOS Mojave,另一台运行 MacOS Catalina

有趣的是,运行 Catalina 的 Mac 似乎很少这样做,尽管它仍然这样做。失败是间歇性的,似乎在套件中的另一个失败之后立即发生,但随后经常在后续运行中继续出现(大约一半的测试套件),即使我已经修复了最初失败的规范。

  1) Template 
     Failure/Error: _query(sql, @query_options.merge(options))

     ActiveRecord::StatementInvalid:
       Mysql2::Error: MySQL client is not connected
     # /Users/jason/.rvm/gems/ruby-2.6.4/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
     # /Users/jason/.rvm/gems/ruby-2.6.4/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
     # /Users/jason/.rvm/gems/ruby-2.6.4/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
     # /Users/jason/.rvm/gems/ruby-2.6.4/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
     # /Users/jason/.rvm/gems/ruby-2.6.4/gems/rspec-wait-0.0.9/lib/rspec/wait.rb:46:in `block (2 levels) in <top (required)>'
     # ------------------
     # --- Caused by: ---
     # Mysql2::Error:
     #   MySQL client is not connected
     #   /Users/jason/.rvm/gems/ruby-2.6.4/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'

Run Code Online (Sandbox Code Playgroud)

小智 10

当我设置我的个人笔记本电脑(Mac OS Catalina)在家工作时,我开始遇到这个问题。在此过程中,我将我们的环境从 Ruby 2.4.7 更新到 2.6.3,将 gems 系统从 3.0.6 更新到 3.1.2。而且,毫无疑问,我们的捆绑宝石也发生了增量更新。我无法确定是哪个更改导致了新的、看似随机的间歇性故障。

谷歌首先引导我来到这里,其次是关于一个最小问题的讨论: https://github.com/seattlerb/minitest/issues/744

然后,仔细查看我的测试,我注意到第一个失败的测试总是触发异步方法。

我将其添加到我的config/environments/test.rb文件中:

config.active_job.queue_adapter = :inline
Run Code Online (Sandbox Code Playgroud)

所有测试都再次通过。

我不知道这是否构成修复或解决方法。我不确定异步进程之前是否正常工作,或者之前是否内联处理它们并且默认行为发生了变化。我们目前进行的测试并未专门验证异步性。所以,目前,这解决了我的问题。


sek*_*kmo 8

就我而言,我在运行 ActiveJob 后台作业测试时遇到了问题,并且添加config.active_job.queue_adapter = :test到 config/environments/test.rb 对我有用。

  • 这是正确的答案。发生问题的原因是 RSpec 回滚事务,而主动支持尝试在后台(可能在单独的线程中)处理附件。 (2认同)