【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歳。無職で暇になり始めたプログラミング(Ruby on Rails)の忘備録をまとめたブログです。最近は別にやりたいことができたのでプログラミングほぼやっていません。気が向いたらまた再開するかも。僕の日常はメインブログの方で更新しています。

コメント

コメントする

目次