データベース(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.yml
のpool
とtimeout
を以下のように変更してみました。
# 変更前
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のサーバーを再起動してから、改めてデータベースへのデータ登録を行ったところ、問題のエラーは出なくなりました。
以上です。
コメント