LoginSignup
6

More than 5 years have passed since last update.

rails test やrails db:migrate:resetが上手くできない時の解決策。

Posted at

問題

rails testをするとbin/rails db:migrate RAILS_ENV=testが表示されたので、指示通りコンソールに打つとすると今度はdevelopment.sqlite3が使えなくなった。

development.sqlite3test.sqlite3をうまく共存?させる方法を探してみた。

解決までの流れ

上手くmigrationが出来なかったのかなと思い`rails db:migration:resetをやってみるも

$ rails db:migrate:reset
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ unlink_internal - C:/Users/siron/siro_app/db/development.sqlite3
bin/rails:4:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

上手くdropができなかったみたいなのでunsafeな方法であるが強制的にdropしてみる。

$ rails db:drop:_unsafe

上手くdrop出来たので次にdatabase.ymlの内容でデータベースを作成していつも通りmigrationをする。

$ rails db:create:all

$ rails db:migrate 

この流れでdevelopment.sqlite3が有効になるが

$ rails t

と入力すると

Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=test

相変わらずこのような表示が出てくるのでtest.sqlite3は有効化されていないらしい。
なので表示通りにtest.sqlite3もmigrationする

$ rails db:migrate RAILS_ENV=test
== 20181027102656 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0042s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0332s
== 20181027102656 CreateUsers: migrated (0.0385s) =============================

== 20181028035604 AddPasswordDigestToUsers: migrating =========================
-- add_column(:users, :password_digest, :string)
   -> 0.0075s
== 20181028035604 AddPasswordDigestToUsers: migrated (0.0177s) ================

この一連の流れでmigrationしたらdevelopment.sqlite3とtest.sqlite3どちらも有効化され、データ作成・テスト共にうまくいった。

お願い

当方プログラミング初心者な為、この記事を見て違和感を感じる表現や間違った解決方法がありましたらご指摘願いたいです。

参考にした記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6