升级到 OSX Sierra 后,我遇到了随机分段错误的问题。它最常发生在运行 rails test 时,我相信这是由于 sqlite3_adapter。
我目前的工作是简单地退出终端并重新启动它。这适用于大约 1 或 2 个轨道测试,到第三个测试时,我几乎可以保证会遇到另一个分段错误。
是否有其他人对此有疑问或找到更好的解决方法?
$ rails t
Running via Spring preloader in process 13817
/Users/USER/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/connection_adapters/sqlite3_adapter.rb:27: [BUG] Segmentation fault at 0x00000000000110
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
编辑:
深入研究 sqlite3_adapter.rb 后,我看到导致分段错误的行是创建新的 SQlite3 数据库。
db = SQLite3::Database.new(
config[:database].to_s,
:results_as_hash => true
)
编辑 2:
我没有退出并重新启动终端,而是发现正在运行:
spring stop
暂时停止问题。不是解决方案,而是更好的解决方法。
编辑 3:
这似乎是 Apple 提供的 libsqlite3 不是 fork 安全的问题。更多信息可以在这里找到:
https://github.com/sparklemotion/sqlite3-ruby/issues/195
现在,我在 ~/.bashrc 文件的底部创建了一个别名:
alias ss='spring stop'
当问题发生时,我现在可以输入:
ss
然后重新运行测试。