如果在Ruby 2.6 Rails 6.0中使用MongoDB时遇到Segmentation Fault错误,请怀疑concurrent-ruby

这是一篇短暂但很有趣的文章。

在结束该进程时出现了分段错误。

当在Rails控制台或Rails runner中运行批处理程序将数据批量导入到MongoDB时

MONGODB | [25] mongodb:27017 | admin.endSessions | SUCCEEDED | 0.000s
[BUG] Segmentation fault at 0x0000000000000014
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0001 p:---- s:0003 e:000002 (none) [FINISH]
-- Machine register context ------------------------------------------------
 RIP: 0x00007f209f69725b RBP: 0x00007f208c6c9c80 RSP: 0x00007f208c6c9bd8
 RAX: 0x0000000000000014 RBX: 0x000055a9a45db430 RCX: 0x0000000000000000
 RDX: 0x0000000000000014 RDI: 0x000055a9a3da07a0 RSI: 0x00007f208c6c9c30
  R8: 0x0000000000000010  R9: 0x000055a99e9f4780 R10: 0x0000000000000010
 R11: 0x0000000000000246 R12: 0x000055a9a2be1fd0 R13: 0x0000000000000000
 R14: 0x000055a9a40b3510 R15: 0x000055a9a248b2e8 EFL: 0x0000000000010206
-- C level backtrace information -------------------------------------------
root@a46ce56df74d:/usr/src/app# 

当我退出Rails控制台时,发生了分段错误。

这样退出Rails控制台时会触发分段错误。

我没太懂。

即使谷歌搜索也找不到有用的信息。

当提到「mongo segmentation fault」或者「mongoid segmentation fault」时,总是出现关于旧版本Ruby的信息。

由于无法确定是由于MongoDB与Ruby的组合造成的问题,还是由于Rails版本的依赖引起的问题,或者是由于Mongoid引起的问题,因此我尝试进行了排除。

    • Mongoidを使わず、mongodbのRubyドライバを直で使うと? →Segmentation Fault発生。Mongoidはシロ。

 

    Ruby 2.5だと? →Segmentation Fault発生

最终的结果我一点也不明白。

在这样的情况下,偶然遇到了“mongoid Rails6 分段错误”。

image.png

有一个人正在写这样的东西。

concurrent-ruby有问题吗?

有一件东西非常像那个。(并不是我发现的,是公司的前辈发现的。真是太神奇了!!)

不知怎么的,尝试将concurrent-ruby升级到1.1.6版本的结果是…

[4] pry(main)> exit
MONGODB | EVENT: #<ServerDescriptionChanged address=mongodb:27017 topology=Single[mongodb:27017] prev=#<Mongo::Server:Description:0x47071403801000 config={"ismaster"=>true, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2020-01-30 08:10:49 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>168, "minWireVersion"=>0, "maxWireVersion"=>8, "readOnly"=>false, "saslSupportedMechs"=>["SCRAM-SHA-256", "SCRAM-SHA-1"], "ok"=>1.0} average_round_trip_time=0.0028635040000000002> new=#<Mongo::Server:Description:0x47071377786500 config={"ismaster"=>true, "maxBsonObjectSize"=>16777216, "maxMessageSizeBytes"=>48000000, "maxWriteBatchSize"=>100000, "localTime"=>2020-01-30 08:10:52 UTC, "logicalSessionTimeoutMinutes"=>30, "connectionId"=>170, "minWireVersion"=>0, "maxWireVersion"=>8, "readOnly"=>false, "saslSupportedMechs"=>["SCRAM-SHA-256", "SCRAM-SHA-1"], "ok"=>1.0} average_round_trip_time=0.0024351632000000002>>
MONGODB | Server description for mongodb:27017 changed from 'standalone' to 'standalone'.
MONGODB | EVENT: #<TopologyChanged prev=Single[mongodb:27017] new=Single[mongodb:27017]>
MONGODB | Topology type 'Single' changed to type 'Single'.
MONGODB | [26] mongodb:27017 #3 | admin.saslStart | STARTED | {}
MONGODB | [26] mongodb:27017 | admin.saslStart | SUCCEEDED | 0.001s
MONGODB | [27] mongodb:27017 #3 | admin.saslContinue | STARTED | {}
MONGODB | [27] mongodb:27017 | admin.saslContinue | SUCCEEDED | 0.001s
MONGODB | [28] mongodb:27017 #3 | admin.saslContinue | STARTED | {}
MONGODB | [28] mongodb:27017 | admin.saslContinue | SUCCEEDED | 0.001s
MONGODB | [29] mongodb:27017 #3 | admin.endSessions | STARTED | {"endSessions"=>[{"id"=><BSON::Binary:0x47071403781940 type=uuid data=0xa448984090b24fab...>}]}
MONGODB | [29] mongodb:27017 | admin.endSessions | SUCCEEDED | 0.001s
root@a46ce56df74d:/usr/src/app# 

哦!

可能已经好了。可能。

总结

如果您在使用Rails 6时开始使用Mongoid或MongoDB时遇到了分段错误,请尝试将concurrent-ruby版本升级至1.1.6.pre1或更高版本。

广告
将在 10 秒后关闭
bannerAds