質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Q&A

解決済

3回答

3417閲覧

Railsで、Migrations are pending. To resolve this issue, run: エラーが出てテストが通りません・・。

helo

総合スコア36

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

0グッド

0クリップ

投稿2019/12/14 02:16

前提・実現したいこと

Railsチュートリアルを進めているなかで、第6章の「一意性を検証する」ところで
あらかじめテキストに沿ってコーディングし、テストスイートを実施したのですが、
タイトルにあるエラーメッセージが出てパス出来ません。
詳しい方が居られましたら、解決方法等をご教示頂けますと有難いです。
よろしくお願いします。

発生している問題・エラーメッセージ

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

該当のソースコード

ソースコード

試したこと

$ rake db:migrate:reset →  $ rake db:migrate
としたらパスしたという投稿があったのでやってみましたが、以下のメッセージが出てリセットできずテストはパスせず同じエラーが発生しました。

Permission denied @ unlink_internal - C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sap_app/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rake aborted!
Errno::EACCES: Permission denied @ unlink_internal - C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sap_app/db/development.sqlite3

Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

rails db:migrate RAILS_ENV=test
これは順序が違います
RAILS_ENV=test rails db:migrate
です。

念の為に
RAILS_ENV=test rails db:drop
RAILS_ENV=test rails db:create
RAILS_ENV=test rails db:migrate
してみて下さい

投稿2019/12/14 09:00

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helo

2019/12/14 11:22

winterboum様 いつもコメントありがとうございます。 仰られているdrop, create, migrateを行いましたら無事パス出来ました。順序はこうなのですね。勉強になりました。 本当に感謝いたします。引き続き頑張ります。
helo

2019/12/14 11:37

ありがとうございます!
guest

0

こんにちは。
テストを通す場合は、テスト用 のデータベースを作成して、テストのスクリプトの中でデータを入れたり消したりします。

bin/rails db:migrate RAILS_ENV=test というメッセージに出ているように、「テスト専用のデータベースであることを明示してマイグレーションを実行する」必要があります。

$ rake db:migrate:reset →  $ rake db:migrate

この状態だと、development (開発でrails sでアプリを起動した時につかうもの)をリセットしようとします。

以下でどうでしょう?

rake db:migrate RAILS_ENV=test # もしくは rails db:migrate RAILS_ENV=test

RAILS_ENV=test という一節を添えて実行すると、「「テスト専用のデータベースであることを明示」になり、sap_app/db/testt.sqlite3 というアフィルができると思います。

うまくできていたら、rails t は通ると思います。

投稿2019/12/14 02:30

suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helo

2019/12/14 02:45

suama様 早速のコメント、回答ありがとうございます。 上記、どちらのコマンドもやってはみたのですが以下のエラーが出てしまい テストは同じエラーが出てしまいました。 $ rails db:migrate RAILS_ENV=test == 20191214011355 AddIndexToUsersEmail: migrating ============================= -- add_index(:users, :email, {:unique=>true}) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::ConstraintException: UNIQUE constraint failed: users.email: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email") C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sap_app/db/migrate/20191214011355_add_index_to_users_email.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: ActiveRecord::RecordNotUnique: SQLite3::ConstraintException: UNIQUE constraint failed: users.email: CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email") C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sap_app/db/migrate/20191214011355_add_index_to_users_email.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: SQLite3::ConstraintException: UNIQUE constraint failed: users.email C:/Users/tae-t/OneDrive/デスクトップ/ruby_lesson/sap_app/db/migrate/20191214011355_add_index_to_users_email.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Tasks: TOP => db:migrate (See full trace by running task with --trace) これを見るとmigrateファイルが問題なのでしょうか?
suama

2019/12/14 13:01

解決されているようなので良かったです! コメントのみですが、developmentにマイグレーションがかかってしまってましたね、失礼しました。 また、 ActiveRecord::RecordNotUnique と出ているので、開発環境に入っているデータにはすでに重複データが存在するからインデックス設定できません、的なエラーになっています。 こういった場合はデータを修正するなどの対応になりますね。
helo

2019/12/15 05:53

suama様 一先ず前には進めております。 ご丁寧にコメントいただきまして感謝いたします。 中々データの部分は難しく大変ですが、少しずつ頑張ります。 ありがとうございました。
guest

0

sqlite3 gemには微妙にバグくさい挙動があり、databaseがリセットできない事があります。
手動でsap_app/db/development.sqlite3を削除なり、リネームし
rails db:migrateしてください

投稿2019/12/14 02:26

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

helo

2019/12/14 08:09

asm様 コメントありがとうございます。 まだまだ初心者なのでお聞きするのですが、sqlite3を削除というのは deleteコマンドで良いのでしょうか?
asm

2019/12/14 09:51

windowsならばdelコマンドですね。 エクスプローラーから右クリック>削除でもいいですが 消すのが必要なのはdb/test.sqlite3だったかもしれません。
helo

2019/12/14 11:15

asm様 ありがとうございます。 やってはみたのですが、やはり当初のエラーが出てしまいます。 困りました。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問