运行 Rails 系统测试的 M1 上的分段错误

Sal*_*ati 6 ruby testing ruby-on-rails segmentation-fault apple-m1

我正在 MacBook M1 Big Sur 操作系统上的 Rails 应用程序中运行系统测试,它给了我一个分段错误错误。

\n

我正在使用通过安装的 Ruby 2.7.1rbenv

\n
\xe2\x9e\x9c which ruby\n/Users/sc/.rbenv/shims/ruby\n\xe2\x9e\x9c ruby -v\nruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [-darwin20]\n
Run Code Online (Sandbox Code Playgroud)\n

现在,每当我运行Rails系统测试时就会出现问题\n我们的系统测试配置了 headless_chrome Capybara 驱动程序,该驱动程序可能(不确定)与分段错误错误有关。

\n

这是我运行测试时得到的结果:

\n
    [BUG] Segmentation fault at 0x000000001b543e20\nruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [-darwin20]\n\n-- Crash Report log information --------------------------------------------\n   See Crash Report log file under the one of following:                    \n     * ~/Library/Logs/DiagnosticReports                                     \n     * /Library/Logs/DiagnosticReports                                      \n   for more details.                                                        \nDon't forget to include the above Crash Report log file in bug reports.     \n\n-- Control frame information -----------------------------------------------\nc:0001 p:---- s:0003 e:000002 (none) [FINISH]\n\n\n-- Other runtime information -----------------------------------------------\n\n* Loaded script: rails_test\n\n* Loaded features:\n\n    0 enumerator.so\n    1 thread.rb\n    2 rational.so\n    3 complex.so\n    4 ruby2_keywords.rb\n    5 /Users/sc/.rbenv/versions/2.7.1/lib/ruby/2.7.0/-darwin20/enc/encdb.bundle\n    6 /Users/sc/.rbenv/versions/2.7.1/lib/ruby/2.7.0/-darwin20/enc/trans/transdb.bundle\n    7 /Users/sc/.rbenv/versions/2.7.1/lib/ruby/2.7.0/-darwin20/rbconfig.rb\n    8 /Users/sc/.rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems/compatibility.rb\n    9 /Users/sc/.rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems/defaults.rb\n   10 /Users/sc/.rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems/deprecate.rb\n   And many more lines...\n
Run Code Online (Sandbox Code Playgroud)\n

关于导致此错误的原因有什么想法吗?

\n

Tim*_*lev 10

发生这种情况是由于Apple M1 上的 ruby​​ 2.7.1 中发生的错误Enumerator#nextCapybara 在Capybara::Result类中使用它。

确保这是您的情况的 simpleset irb 片段是[1,2,3].to_enum.next

irb(main):003:0> [1,2,3].to_enum.next
[BUG] Segmentation fault at 0x0000000004809020
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [-darwin20]
Run Code Online (Sandbox Code Playgroud)

最好的解决方案是将ruby版本升级到2.7.3,它没有这个bug。

(如果你需要快速运行测试并稍后解决核心问题,你可以在本地编辑水豚的result.rb,作为一个愚蠢的临时解决方法。但我强烈建议尽快升级ruby版本)

UPD:我已经在 ruby​​ 错误跟踪器中发布了错误报告。