Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

問題

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どちらも有効化され、データ作成・テスト共にうまくいった。

お願い

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

参考にした記事

https://qiita.com/parsetree/items/e9b08c6b11f762b949de

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした