升级到OS Sierra后,Rails的分段错误,可能与sqlite3 gem有关
升级到OSX Sierra后,我遇到了随机分段错误的问题。 它最常出现在运行rails测试时,我相信它是由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不是叉安全的问题。 更多信息可以在这里找到:
https://github.com/sparklemotion/sqlite3-ruby/issues/195
现在,我在〜/ .bashrc文件的底部创建了一个别名:
alias ss='spring stop'
出现问题时,我现在可以输入:
ss
然后重新运行测试。
看起来已经发布了补丁! 补丁将在brew文件夹中查找sqlite3,而不是默认使用Apple提供的版本。 只需运行:
bundle update
获取最新版本的sqlite3-ruby,如果你的homebrew目录中还没有安装sqlite3,请运行:
brew install sqlite3
升级到Sierra时遇到了同样的问题。 一个简单的bundle update
就可以了! 希望这可以帮助。
尝试重建sqlite3 gem。 它具有原生扩展,并且在Sierra环境中重新编译它们可能会解决问题。
跑:
gem pristine sqlite3
哪个应该输出如下:
Restoring gems to pristine condition... Building native extensions. This could take a while... Restored sqlite3-1.3.10 Building native extensions. This could take a while... Restored sqlite3-1.3.11
我注意到我在尝试运行rails console –sandbox时也遇到了段错误。 我发现这个问题似乎解决了这个问题; 专门跑步
xcode-select --install
似乎解决了它。 这绝不是科学certificate的,但是我现在能够运行rails控制台和所有没有ruby段故障的测试。
同样的问题w / Sierra。 这个页面上的所有内容都不适用于我,即gem pristine sqlite3
, xcode-select --install
, sqlite3; gem uninstall sqlite3; bundle update
sqlite3; gem uninstall sqlite3; bundle update
sqlite3; gem uninstall sqlite3; bundle update
。 我最终用rbenv uninstall 2.3.1
完全卸载了Ruby版本,然后重新安装了它。 这很有效。 我不知道为什么。
我面临同样的问题,我将sqlite3 gem升级到1.3.12并且它有所帮助
所有以前的解决方案都没有工作,所以我已经修复了这个方法:
gem uninstall sqlite3
brew install sqlite3
gem install sqlite3 -- --with-sqlite3-include=/usr/local/Cellar/sqlite/3.15.2/include --with-sqlite3-lib=/usr/local/Cellar/sqlite/3.15.2/lib
(检查您在Cellar的版本)
这是一个临时修复,可能如果更新捆绑它将停止工作,你会再次这样做,但至少我可以在我的机器上工作