$ rails db:migrate:reset できないときのたい処理法(windows)
Railsチュートリアル10章をやってる途中、コマンドラインで$ rails db:migrate:resetを打ったがエラーが出た。
$ rails db:migrate:reset
Permission denied @ apply2files - C:/Ruby_program/sample_app/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ apply2files - C:/Ruby_program/sample_app/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)
原因
Railsのバグらしく、根本的にwindowsでは自らがアクセスしているファイルを削除できないとのこと
解決策
コマンドで直接、db/development.sqlite3のファイルを消し、db:create db:migrateを行う
$ rm db/development.sqlite3
$ rails db:create db:migrate
こうするとエラーが発生せず、マイグレーションし直すことができた。
まとめ
$ rails db:reset
$ rm db/development.sqlite3
$ rails db:setup
は等しい。また、
$ rails db:migrate:reset
$ rm db/development.sqlite3
$ bin/rails db:create db:migrate
と等しい。
補足
ruby 2.6.3p62 (2019-04-16 revision 67580) [x64-mingw32]
Rails 5.2.3