Je souhaite réinitialiser la base de données de mon projet Rails 5, mais la commande Rails db:reset
ne fonctionne pas.
message d'erreur:
Permission denied @ unlink_internal - C:/sites5/dawnrebirth/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
Rails aborted!
Errno::EACCES: Permission denied @ unlink_internal - C:/sites5/dawnrebirth/db/development.sqlite3
bin/Rails:4:in `require'
bin/Rails:4:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)
Généralement, lorsque rake db:reset
ne fonctionne pas ou ne fonctionne pas pour moi, je supprime simplement les fichiers development.sqlite3 et schema.rb, puis réexécute la commande rake db:migrate
pour régénérer les deux fichiers. Mais prenez note pour ne jamais essayer ceci dans un environnement de production s'il vous plaît.
On m'a dit d'ajouter mon entrée pour Rails 5 comme réponse, donc sur demande ...
Tout d’abord, arrêtez le serveur Rails.
Deuxièmement, lancez ces 3 commandes ...
Rails db:drop
Rails db:schema:load
Rails db:reset
Je n'aime pas fouiller dans les fichiers, c'est donc plus facile et plus rapide que de supprimer un fichier. Mise en garde: que vous utilisiez mon correctif ou non - sauvegardez toujours votre schéma quelque part tous les jours (comme avec un système de référentiel ... github/bitbucket).
Je pense que 'rake' peut être utilisé à la place de Rails pour les versions antérieures à Rails 5, mais n'a pas encore été testé sur Rails 3 ou 2.
Comme @ govind-shaw a dit ... de toute façon, vous devez arrêter le serveur Rails et le redémarrer.
On dirait que Rails a essayé de supprimer le fichier mais n'a pas réussi. Vérifiez les éléments suivants:
rake db:reset
.rake db:reset
immédiatement après le redémarrage a une forte probabilité de s'exécuter correctement.try Rails db:drop:_unsafe
voir https://github.com/Rails/rails/issues/31589
Quand vous faites rake db: reset , il exécute db: drop et db: setup en séquence.
1.Vous devez peut-être arrêter votre serveur et votre console Rails.
2. Un redémarrage peut également résoudre le problème.