【Rails】SQLite3::BusyException: database is locked のエラーを解消する方法

データベース(SQLite3)にデータを登録しようとしたところ、以下のようなエラーを検出しました。

上記のエラーを解消する方法について試したことをまとめました。

目次

エラーの原因と解決方法

今回のエラー

SQLite3::BusyException: database is locked

は、DB Browser for SQLiteという、SQLite管理ソフト内でデータを更新し忘れていたのが原因かと思われます。

以下に、解決方法として試したことを

方法その1

ターミナルで$ rails consoleを実行してirbを開き、以下のコマンドを実行してみました。

ActiveRecord::Base.connection.execute("BEGIN TRANSACTION; END;")

しかし、結果は失敗。

エラーは解消できませんでした。

方法その2

config/database.ymlpooltimeoutを以下のように変更してみました。

# 変更前
default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

# 変更後
default: &default
  adapter: sqlite3
  pool: 50
  timeout: 10000

しかし、こちらも失敗。

方法その3

DB Browser for SQLiteを用いて、データベースを更新してみました。

結論から言うと、この方法ではうまくいきました。

DB Browser for SQLiteの「データベースを開く」をクリックして開きます。

アプリフォルダのdbディレクトリ内のdevelopment.sqlite3ファイルを選択して開きます。

すると、以下のようなポップアップウィンドウが出るので、「Save」をクリックしてデータベースを更新します。

Railsのサーバーを再起動してから、改めてデータベースへのデータ登録を行ったところ、問題のエラーは出なくなりました。

以上です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

愛知の34歳。ブロガー&フリーター(現在無職)。院卒で大手自動車部品メーカーに入社するも、仕事が嫌になり3年で退職。28歳でNZワーホリへ。帰国後から現在まで、ワーホリのような「働きたい時だけ働く」「嫌なことはしない」という生き方しています。ここ1年は無職。趣味は登山、旅、音ゲー(ギタフリ)、たまにプログラミング。

コメント

コメントする

目次