Ruby on rails 升级到OS Sierra后Rails出现分段故障,可能与sqlite3 gem有关

Ruby on rails 升级到OS Sierra后Rails出现分段故障,可能与sqlite3 gem有关,ruby-on-rails,sqlite,sqlite3-ruby,ruby-2.3.1,Ruby On Rails,Sqlite,Sqlite3 Ruby,Ruby 2.3.1,升级到OSX Sierra后,我遇到了随机分段错误的问题。它最常见于运行rails测试时发生,我相信这是由于sqlite3_适配器造成的 我目前的解决方法是简单地退出终端并重新启动它。这适用于大约1或2个rails测试,到第三个测试时,我几乎肯定会遇到另一个分段错误 是否有其他人对此有异议或找到更好的解决方法 $ rails t Running via Spring preloader in process 13817 /Users/USER/.rbenv/versions/2.3.1/lib/

升级到OSX Sierra后,我遇到了随机分段错误的问题。它最常见于运行rails测试时发生,我相信这是由于sqlite3_适配器造成的

我目前的解决方法是简单地退出终端并重新启动它。这适用于大约1或2个rails测试,到第三个测试时,我几乎肯定会遇到另一个分段错误

是否有其他人对此有异议或找到更好的解决方法

$ 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:

这似乎是苹果提供的libsqlite3不安全的问题。更多信息可在此处找到:

现在,我已经在~/.bashrc文件的底部创建了一个别名:

alias ss='spring stop'
出现问题时,我现在可以键入:

ss

然后重新运行测试

尝试重建sqlite3 gem。它有本机扩展,在Sierra环境中重新编译它们可能会解决这个问题

运行:

这将产生如下输出:

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

升级到Sierra时,我也遇到了同样的问题。一个简单的包更新就可以了!希望这有帮助

我注意到,在尝试运行rails console-sandbox时,我也遇到了SEGFULT。我发现这似乎解决了这个问题;专门运行

xcode-select --install

似乎解决了这个问题。这还没有得到科学的证明,但是我现在能够运行rails控制台和所有测试,而不会出现ruby段错误。

看起来已经发布了补丁!该修补程序将在brew文件夹中查找sqlite3,而不是默认使用Apple提供的版本。简单运行:

bundle update
要获取最新版本的sqlite3 ruby,如果您的自制目录中尚未安装sqlite3,请运行:

brew install sqlite3

同样的问题,西拉。这个页面上的东西都不适合我,比如gem pristine sqlite3、xcode select-install、sqlite3;gem卸载sqlite3;捆绑更新。我最终用rbenv uninstall 2.3.1完全卸载了Ruby版本,然后重新安装了它。这起作用了。我不知道为什么。

我遇到了同样的问题,我将sqlite3 gem升级到1.3.12,这有助于以前的所有解决方案都不起作用,因此我采用这种方式进行了修复:

gem卸载sqlite3

brew安装sqlite3

gem安装sqlite3--with-sqlite3-include=/usr/local/cillar/sqlite/3.15.2/include-with-sqlite3-lib=/usr/local/cillar/sqlite/3.15.2/lib

检查你在地窖里的版本


这是一个临时修复,如果更新捆绑包,它可能会停止工作,您将再次执行此操作,但至少我可以在没有执行此操作的机器上工作。我还尝试卸载并重新安装sqlite3 gem。不走运。这是从自制软件安装sqlite3后需要的最后一步。这暂时起作用,但问题似乎又出现了:@哈奇在这里也发生了同样的事情。这对我很有帮助,macOS Sierra尝试了这一点,我只是觉得他们已经安装好了。谢谢你的建议!这对我有用。如果您得到一个提示,此公式仅适用于keg,这意味着它未被符号链接到/usr/local消息中,我忽略了它,没有任何问题;gem卸载sqlite3;捆绑更新。我无法让它为我工作。我已经运行过好几次了,还有gem pristine sqlite3,但仍然没有任何效果。我正在运行ruby 2.3.3。还有什么我能做的吗?你有安装自制软件吗?运行brew List时会看到什么在编辑gem文件后,需要运行bundle install
brew install sqlite3