升级到 OS Sierra 后 Rails 出现分段错误,可能与 sqlite3 gem 有关
Segmentation fault with Rails after upgrading to OS Sierra, possibly related to sqlite3 gem
升级到 OSX Sierra 后,我遇到了随机分段错误的问题。它最常发生在 运行 rails 测试时,我相信这是由于 sqlite3_adapter.
我目前的解决方法是简单地退出终端并重新启动它。这适用于大约 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 不安全的问题。可以在这里找到更多信息:
https://github.com/sparklemotion/sqlite3-ruby/issues/195
现在,我在 ~/.bashrc 文件的底部创建了一个别名:
alias ss='spring stop'
出现问题时,我现在可以输入:
ss
然后重新运行测试。
尝试重建 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
我在升级到 Sierra 时遇到了同样的问题。一个简单的 bundle update
就可以了!希望这可以帮助。
我注意到在尝试 运行 rails console --sandbox 时我也遇到了段错误。我发现 似乎解决了这个问题;特别是 运行宁
xcode-select --install
似乎解决了这个问题。这绝不是经过科学证明的,但是我现在能够 运行 一个 rails 控制台和所有测试都没有 ruby 段错误。
看来补丁已经发布了!该补丁将在您的 brew 文件夹中查找 sqlite3,而不是默认使用 Apple 提供的版本。只需 运行:
bundle update
获取最新版本的 sqlite3-ruby 如果您还没有在 homebrew 目录中安装 sqlite3,运行:
brew install sqlite3
同样的问题w/Sierra。此页面上的 None 内容对我有用,即 gem pristine sqlite3
、xcode-select --install
、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 中的版本)
这是一个临时修复,如果更新包,它可能会停止工作,你会再做一次,但至少我可以在我的机器上工作
升级到 OSX Sierra 后,我遇到了随机分段错误的问题。它最常发生在 运行 rails 测试时,我相信这是由于 sqlite3_adapter.
我目前的解决方法是简单地退出终端并重新启动它。这适用于大约 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 不安全的问题。可以在这里找到更多信息:
https://github.com/sparklemotion/sqlite3-ruby/issues/195
现在,我在 ~/.bashrc 文件的底部创建了一个别名:
alias ss='spring stop'
出现问题时,我现在可以输入:
ss
然后重新运行测试。
尝试重建 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
我在升级到 Sierra 时遇到了同样的问题。一个简单的 bundle update
就可以了!希望这可以帮助。
我注意到在尝试 运行 rails console --sandbox 时我也遇到了段错误。我发现
xcode-select --install
似乎解决了这个问题。这绝不是经过科学证明的,但是我现在能够 运行 一个 rails 控制台和所有测试都没有 ruby 段错误。
看来补丁已经发布了!该补丁将在您的 brew 文件夹中查找 sqlite3,而不是默认使用 Apple 提供的版本。只需 运行:
bundle update
获取最新版本的 sqlite3-ruby 如果您还没有在 homebrew 目录中安装 sqlite3,运行:
brew install sqlite3
同样的问题w/Sierra。此页面上的 None 内容对我有用,即 gem pristine sqlite3
、xcode-select --install
、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 中的版本)
这是一个临时修复,如果更新包,它可能会停止工作,你会再做一次,但至少我可以在我的机器上工作