Rails tやRails sでクラッシュレポートが出る!テストが実行されないとき。sqlite3関連エラー


今回起きたエラー

Rails6.0でアプリ作成中にサーバー立ち上げや、
テスト実行で以下のクラッシュレポートが出ました。

-- Crash Report log information --------------------------------------------
   See Crash Report log file under the one of following:
     * ~/Library/Logs/CrashReporter
     * /Library/Logs/CrashReporter
     * ~/Library/Logs/DiagnosticReports
     * /Library/Logs/DiagnosticReports
   for more details.
Don't forget to include the above Crash Report log file in bug reports.

このサイトによると、使っているsqlite3の参照元がいけないだとか。

こちらのサイトを参考に、
使うsqlite3をhomebrewからインストールしたものに変えてみた。

開発環境

OS: 64bit Mac macOS Catalina 10.15.3
Ruby 2.6.3
Rails6.0

やったこと

sqlite3インストール準備、brewをアップデート

sqlite3のバージョン確認。

$ sqlite3 --version
3.28.0 2019-04-15 14:49:49 378230ae7f4b721c8b8d83c8ceb891449685cd23b1702a57841f1be40b5daapl

sqlite3のパスを確認。

$ which sqlite3
/usr/bin/sqlite3

一応あらかじめbrewをアップデートしておく。

$ brew update

インストールしたパッケージのアップグレード。

$ brew upgrade

sqlite3のインストール

$ brew install sqlite3
Warning: sqlite 3.31.1 is already installed and up-to-date
To reinstall 3.31.1, run `brew reinstall sqlite`

どうやら元々大丈夫そうだったけど、reinstallされた。問題はなさそう。

/usr/local/binへのシンボリックリンク作成

cdでこんなこともできるんですね。

$ cd /usr/local/bin

Homebrewのインストール先の『Cellar』からsqlite3のシンボリックリンクを作成します。

とのことだ。
3.31.1という箇所は各自のバージョンに合わせてください。

$ ln -sf ../Cellar/sqlite/3.31.1/bin/sqlite3 ./

先ほどのシンボリックリンクが作成されたか確認。

$ ls -la

lrwxr-xr-x    1 takerusugeno  admin        35  5  4 01:04 sqlite3 -> ../Cellar/sqlite/3.31.1/bin/sqlite3

パスを通す

vimで直接パスを編集していきます。

$ vim ~/.bash_profile

最後の行に以下を追記。

export PATH=/usr/local/bin:"$PATH"

設定内容を反映させる。

$ source ~/.bash_profile

変更の確認

再度バージョン確認。

$ sqlite3 --version
3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6

ふむ、ちゃんと先ほどbrewでインストールしたバージョンになってますね。

パスを確認。

$ which sqlite3
/usr/local/bin/sqlite3

変更できてるみたいです。

まだクラッシュレポートが出る

その後、こちらのサイトを見つけ、こちらに飛び、

Gem fileのminitestを'5.14.0'にして、

$ bundle update

以前、変わらずクラッシュレポート

最終手段

sqlite3をアンインストール。

$ gem uninstall sqlite3
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 repository.

その後、sudoで強引に消す。
※個人開発なので777を使いましたが、あくまで最終手段です。
chmodについては、あとでちゃんと調べるようにとメンターに念押しされました。

$ sudo chmod -R 777 /Library/Ruby/Gems/2.6.0

結果、システムのRubyに入ってた二つのバージョンのsqlite3が消えたようです。

ここで、試しにテストすると、稼働しました。
しかし、依然クラッシュレポートが出てる。

とりあえずテストが実行されたので、今はこれで御の字。

と思ったが、Gitにpush後にもう一度テストしたらクラッシュが出なくなった。

なるほど、さっぱり分からんという状態です。

ローカル環境構築時に、よく分からなくて複数バージョンのGemを大量に入れてしまっていたことと、
それらのシステムのRubyのGemを使用元にしているために、コンフリクトを起こしやすくなっているかもしれないです。

現在作っているアプリが完成したら、環境構築を1からやり直した方が良いかもしれないと感じました。