###はじめに
rails tutorialを学習中です。
学習中、テスト実行時に何度も遭遇したエラー
RuntimeError: RuntimeError: database is locked
ActiveRecord::StatementInvalid: ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked
これらがようやく回避できるようになりましたので記しておこうかと思います。
因みに余談ですが、9章まではこのエラーが出ても何度か繰り返し
rails test
とすると5回目くらいでパスすることが出来ていました。(非常に面倒でした)
しかし9章にて何度実行してもパス出来なくなりました。
###試したこと
①rails consoleにて
ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")
を実行
結果 効果なし
②database.ymlファイルにて、timeoutの値を5000から15000に変更
結果 効果なし
③db/test.sqlite3ファイルの名前を変更
#sample_app/dbディレクトリにて
mv test.sqlite3 new.test.sqlite3
元と同じファイル名でコピー。
cp -p new.test.sqlite3 test.sqlite3
new.test.sqlite3ファイルは消去
結果 効果なし
④DB Browser for SQLiteに移り、以下のショートカットを実行
Ctrl + S
(左上の[ファイル]から[変更の書き込み]でもいいと思います。ちなみに私は変更がなかったからか、クリックできませんでした。意味がないとわかりつつも一応コマンドでCtrl + Sをしてみました)
更に念のためと
Ctrl + Shift + S
2つのショートカット実行後、DB Browser for SQLiteを終了、ターミナルなども全て一度終了し、起動しなおす。
結果 効果なし
⑤test/test_help.rbファイルの
#恐らく8、9行目くらい
parallelize(workers: :number_of_processors, with: :threads)
をコメントアウトにする
# parallelize(workers: :number_of_processors, with: :threads)
結果 エラーが表示されず、テストがパスするようになった!!
###参考記事
①②④
https://stackoverflow.com/questions/58854780/what-does-the-database-is-locked-error-message-mean-in-ruby-on-rails-testing
③
http://fanblogs.jp/scripts/archive/61/0
⑤
https://stackoverflow.com/questions/58854780/what-does-the-database-is-locked-error-message-mean-in-ruby-on-rails-testing (一番最後の回答)
###終わりに
同じエラーに悩まされている方の参考になれば幸いです。