[RUBY] ActiveRecord :: StatementInvalid: SQLite3 :: BusyException: Datenbank ist gesperrt

Einführung

Ich lerne das Rails-Tutorial. Während des Trainings und der Durchführung von Tests traten häufig Fehler auf

RuntimeError:         RuntimeError: database is locked
ActiveRecord::StatementInvalid:         ActiveRecord::StatementInvalid: SQLite3::BusyException: database is locked

Jetzt, da diese vermieden werden können, werde ich sie aufschreiben.

Übrigens wird dieser Fehler bis Kapitel 9, selbst wenn er auftritt, mehrmals wiederholt.

rails test

Dann konnte ich es ungefähr zum 5. Mal bestehen. (Es war sehr mühsam) Egal wie oft ich es in Kapitel 9 ausgeführt habe, ich konnte es nicht bestehen.

Was ich versucht habe

① An der Schienenkonsole

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

Lauf

Ergebnis keine Wirkung

(2) Ändern Sie den Timeout-Wert in der Datei database.yml von 5000 auf 15000.

Ergebnis keine Wirkung

③ Benennen Sie die Datei db / test.sqlite3 um

#sample_app/Im Datenbankverzeichnis
mv test.sqlite3 new.test.sqlite3

Kopieren Sie mit demselben Dateinamen wie das Original.

cp -p new.test.sqlite3 test.sqlite3

Löschen Sie die Datei new.test.sqlite3

Ergebnis keine Wirkung

④ Wechseln Sie zu DB Browser für SQLite und führen Sie die folgende Verknüpfung aus Ctrl + S (Ich denke, Sie können auch oben links unter [Datei] auf [Änderungen schreiben] klicken. Ich konnte übrigens nicht klicken, da keine Änderungen vorgenommen wurden. Ich habe Strg + S mit einem Befehl versucht, obwohl ich wusste, dass er bedeutungslos ist. T) Nur für den Fall Ctrl + Shift + S

Beenden Sie nach dem Ausführen der beiden Verknüpfungen den DB Browser für SQLite, beenden Sie alle Terminals usw. und starten Sie ihn neu.

Ergebnis keine Wirkung

⑤ In der Datei test / test_help.rb

#Wahrscheinlich über die 8. und 9. Zeile
parallelize(workers: :number_of_processors, with: :threads)

Auskommentieren

# parallelize(workers: :number_of_processors, with: :threads)

Als Ergebnis wurde kein Fehler angezeigt und der Test bestanden !!

Referenzartikel

①②④ 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 (letzte Antwort)

Am Ende

Ich hoffe, es ist hilfreich für diejenigen, die unter dem gleichen Fehler leiden.

Recommended Posts

ActiveRecord :: StatementInvalid: SQLite3 :: BusyException: Datenbank ist gesperrt
ActiveRecord :: StatementInvalid (SQLite3 :: SQLException: keine solche Tabelle: main.follows ~