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
その後、テストを再実行します。