24

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

私の現在の回避策は、単に端末を終了して再起動することです。これは約 1 つまたは 2 つのレール テストで機能し、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 が fork に対して安全でないという問題のようです。詳細については、次を参照してください。

https://github.com/sparklemotion/sqlite3-ruby/issues/195

今のところ、~/.bashrc ファイルの下部にエイリアスを作成しました。

alias ss='spring stop'

問題が発生したら、次のように入力できます。

ss

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

4

7 に答える 7

8

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

bundle update

sqlite3-ruby の最新バージョンを取得するには、homebrew ディレクトリに sqlite3 をまだインストールしていない場合は、次を実行します。

brew install sqlite3
于 2016-10-09T20:19:28.773 に答える
4

Sierra へのアップグレード時に同じ問題が発生しました。シンプルbundle updateでうまくいきます!お役に立てれば。

于 2016-10-02T15:21:25.210 に答える
2

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
于 2016-10-02T00:59:09.017 に答える
2

特に rails console --sandbox を実行しようとすると、segfault も発生することに気付きました。この問題を解決しているように見えるこの他の質問を見つけました。具体的に実行中

xcode-select --install

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

于 2016-10-06T04:42:14.197 に答える
0

以前の解決策はすべてうまくいかなかったので、次のように修正しました。

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

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

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

于 2016-12-12T13:57:55.593 に答える
0

私は同じ問題に直面し、sqlite3 gem を 1.3.12 にアップグレードしました。

于 2016-12-03T23:29:41.443 に答える
0

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

于 2016-12-01T02:30:08.063 に答える