[RUBY] ActiveRecord :: StatementInvalid: SQLite3 :: BusyException: la base de données est verrouillée

introduction

J'apprends le tutoriel sur les rails. Erreurs rencontrées plusieurs fois pendant l'entraînement et l'exécution des tests

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

Maintenant que ceux-ci peuvent être évités, je vais les écrire.

D'ailleurs, en passant, jusqu'au chapitre 9, même si cette erreur se produit, elle sera répétée plusieurs fois.

rails test

Ensuite, j'ai pu le passer environ la 5ème fois. (C'était très gênant) Cependant, peu importe le nombre de fois que je l'ai exécuté au chapitre 9, je ne pouvais pas le passer.

Ce que j'ai essayé

① À la console des rails

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

Courir

Résultat aucun effet

② Dans le fichier database.yml, modifiez la valeur du délai d'expiration de 5000 à 15000

Résultat aucun effet

③ Renommez le fichier db / test.sqlite3

#sample_app/Dans le répertoire db
mv test.sqlite3 new.test.sqlite3

Copiez avec le même nom de fichier que l'original.

cp -p new.test.sqlite3 test.sqlite3

Effacer le fichier new.test.sqlite3

Résultat aucun effet

④ Accédez à DB Browser pour SQLite et exécutez le raccourci suivant Ctrl + S (Je pense que vous pouvez également cliquer sur [Ecrire les modifications] à partir de [Fichier] en haut à gauche. Au fait, je ne pouvais pas cliquer car il n'y avait pas de changements. J'ai essayé Ctrl + S avec une commande même si je savais que cela n'avait aucun sens. T) Au cas où Ctrl + Shift + S

Après avoir exécuté les deux raccourcis, quittez DB Browser pour SQLite, quittez tous les terminaux, etc., et redémarrez.

Résultat aucun effet

⑤ Dans le fichier test / test_help.rb

#Probablement sur les 8e et 9e lignes
parallelize(workers: :number_of_processors, with: :threads)

Pour commenter

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

En conséquence, aucune erreur n'a été affichée et le test a réussi !!

Article de référence

①②④ 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 (dernière réponse)

À la fin

J'espère que cela sera utile pour ceux qui souffrent de la même erreur.

Recommended Posts

ActiveRecord :: StatementInvalid: SQLite3 :: BusyException: la base de données est verrouillée
ActiveRecord :: StatementInvalid (SQLite3 :: SQLException: aucune table de ce type: main.follows ~