web-dev-qa-db-ja.com

OS Sierraにアップグレードした後のRailsでのセグメンテーション違反、おそらくsqlite3gemに関連する

OSX Sierraにアップグレードした後、ランダムなセグメンテーション違反に問題があります。これは、Rails testを実行しているときに最も一般的に発生し、sqlite3_adapterが原因であると考えています。

私の現在の回避策は、単にターミナルを終了して再起動することです。これは約1または2 Railsテストで機能し、3番目のテストまでに別のセグメンテーション違反が発生することがほぼ保証されています。

他の誰かがこれに問題を抱えているか、より良い回避策を見つけていますか?

$ 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

その後、テストを再実行します。

24
Hutch

パッチが発行されたようです!パッチは、デフォルトでAppleが提供するバージョンを使用する代わりに、brewフォルダーでsqlite3を検索します。単に実行します:

bundle update

sqlite3-Rubyの最新バージョンを入手し、自作ディレクトリにsqlite3がまだインストールされていない場合は、次のコマンドを実行します。

brew install sqlite3
8
Hutch

Sierraにアップグレードするときに同じ問題が発生しました。シンプルな - bundle updateトリックを行います!お役に立てれば。

4
Daniel Chamorro

Sqlite3gemを再構築してみてください。ネイティブ拡張機能があり、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
2
Matt Brictson

Rails console --sandboxを具体的に実行しようとすると、セグメンテーション違反が発生することに気づきました。 この他の質問 がこの問題を修正したようです。 ;特に実行中

xcode-select --install

それを解決したようです。これはまだ科学的に証明されているわけではありませんが、Railsコンソールと、Rubyセグメント障害なしですべてのテストを実行できるようになりました。

2
lowphive

シエラと同じ問題。このページの内容、つまりgem pristine sqlite3xcode-select --installsqlite3; gem uninstall sqlite3; bundle updateはどれも機能しませんでした。最終的にRubyバージョンをrbenv uninstall 2.3.1で完全にアンインストールしてから、再インストールしました。これでうまくいきました。理由はわかりません。

0
dps

私は同じ問題に直面しました、私はsqlite3 gemを1.3.12にアップグレードしました、そしてそれは助けになりました

0
Aigul

以前のすべてのソリューションが機能しなかったため、次のように修正しました。

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

(セラーにあるバージョンを確認してください)

これは一時的な修正であり、バンドルを更新すると機能しなくなり、再度実行できますが、少なくとも自分のマシンで作業できます

0
ilbonte