プログラミングの勉強日記
2020年8月10日 Progate Lv.226
rails db:migrateでのエラーという記事でマイグレーションファイルを操作するときにエラーが起きて、rails db:migrate:reset
で対処すると述べたが、このrails db:migrate:reset
を使おうとするとエラーが出たのでこれの対処をする。
エラー内容
Rails自体のバグ(?)で、Windowsでは自分がアクセスしてるファイルを削除できないことが問題になっているみたい、、
$ rails db:migrate:reset
C:/Ruby26-x64/lib/ruby/2.6.0/x64-mingw32/etc.so: warning: already initialized constant Struct::Passwd
le::VERSION
C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/forwardable-1.3.1/lib/forwardable/version.rb:3: warning:
previous definition of VERSION was here
C:/Ruby26-x64/lib/ruby/2.6.0/forwardable.rb:117: warning: already initialized constant Forwardable::FORWARDABLE_VERSION
C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/forwardable-1.3.1/lib/forwardable/version.rb:4: warning:
previous definition of FORWARDABLE_VERSION was here
DEPRECATION WARNING: Single arity template handlers are deprecated. Template handlers must
now accept two parameters, the view object and the source for the view object.
Change:
>> Coffee::Rails::TemplateHandler.call(template)
To:
>> Coffee::Rails::TemplateHandler.call(template, source)
(called from <top (required)> at C:/Users/Owner/mysite/ruby/travel/Rakefile:6)
Permission denied @ apply2files - C:/Users/Owner/mysite/ruby/travel/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ apply2files - C:/Users/Owner/mysite/ruby/travel/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)
解決方法(結論)
db/development.sqlite3
を手動で削除したらデータベースをリセットすることができた。
$ rm db/development.sqlite3
$ bin/rails db:setup
対処法
1.rails db:resetをする
rails db:migrate:reset
でデータベースのリセットとmigrateの実行を同時に行うと失敗する。なので、マイグレーションファイル内の実行する順番に問題がある可能性があり、rails db:reset
とrails db:migrate
を分けて実行すると解決する。
$ rails db:reset
$ rails db:migrate
私はこれでは解決しなかった。
2. rails db:resetの代わりに以下のコマンドを(これで解決!)
$ rm db/development.sqlite3
$ bin/rails db:setup
3. rails db:migrate:resetの代わりに以下のコマンドを
$ rm db/development.sqlite3
$ bin/rails db:create db:migrate
rails db:resetとrails db:migration:resetの違い
rails db:reset:db/schema.rb
を元にデータベース作成するdb/migrate/〇〇.rb
は使わない。
rails db:migrate:reset:データベースを削除した後にdb/migrate/〇〇.rb
を古い順から実行する。
参考文献
db:migrate:reset でエラーが出ます
rails db:migrate:resetできなかったのでrails db:resetした