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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

3398閲覧

ActiveRecord::PendingMigrationErrorを解決したい

_tonton_

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/02 16:19

編集2020/08/03 01:15

前提・実現したいこと

ActiveRecord::PendingMigrationErrorが解消できません。
お力添えいただきたいです。

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

イメージ説明
イメージ説明
マイグレーションファイルがdownになっていることが原因かと考えていますが、
ここからの復旧方法がわかりません。

関連すると思われるマイグレーションファイル

  • 20200802154808_devise_create_users.rb

ruby

1class DeviseCreateUsers < ActiveRecord::Migration[6.0] 2 def change 3 create_table :users do |t| 4 ## Database authenticatable 5 t.string :name, 6 t.string :email, null: false, default: "" 7 t.string :encrypted_password, null: false, default: "" 8 9 ## Recoverable 10 t.string :reset_password_token 11 t.datetime :reset_password_sent_at 12 13 ## Rememberable 14 t.datetime :remember_created_at 15 16 t.timestamps null: false 17 end 18 19 add_index :users, :name 20 add_index :users, :email, unique: true 21 add_index :users, :reset_password_token, unique: true 22 end 23end
  • 20200730140954_add_image_to_user.rb

ruby

1class AddImageToUser < ActiveRecord::Migration[6.0] 2 def change 3 add_column :users, :image, :string 4 end 5end 6

試したこと

エラー画面に記載のあるrails:db:migrate RAILS_ENV=developmentや
bundle exec rake db:migrate 等
コマンドでの解決法で改善しませんでした。
またupコマンドも使えません。

-bin/rails db:migrateおよびrails db:drop実行時
イメージ説明

-rails db:migrate RAILS_ENV=development実行時
イメージ説明

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

Rails、devise利用しています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

実行されていないマイグレーションファイルがあると、今回のエラーが出ます。

(1) まずは、bin/rails db:migrateを実行してください。
それで解決すればOKです。

(2) もし、うまく行かなくなったら最初からやり直します。
つまりDBを削除して、新規にDBを作り直してマイグレーションを実行するという事です。

rails serverを停止してから、以下を実行してください。

bin/rails db:drop bin/rails db:create bin/rails db:migrate

追記

DBを作り直しても、同じエラーが出るならマイグレーションファイルが正しくないという事です。
今回はusersテーブルに対するマイグレーションファイル名がおかしいです。
usersテーブルを作る前に、usersテーブルにimageカラムを追加しようとしたら、エラーになるのは当然です。

解決策は、マイグレーションファイルの先頭の時刻を入れ替える事です(=ファイル名の変更)。

20200730140954_add_image_to_user.rb
20200802154808_devise_create_users.rb

20200730140954_devise_create_users.rb
20200802154808_add_image_to_user.rb

これをした上で、DBを作り直してください。

bin/rails db:drop bin/rails db:create bin/rails db:migrate

投稿2020/08/02 17:30

編集2020/08/03 01:18
mingos

総合スコア4025

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

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

_tonton_

2020/08/03 00:12

回答ありがとうございます。 どちらのコマンドも試してみましたが、同様のエラー結果となりました。 記事に追記しましたので、ご確認いただけると嬉しいです。
_tonton_

2020/08/03 02:05 編集

ご確認いただき、ありがとうございます! ファイル名を入れ替えたところ、 db:createまではエラーが出ず、うまくいきました。 しかしdb:createをすると rails aborted! SyntaxError: /Users/〇〇/projects/〇〇/db/migrate/20200730140954_devise_create_users.rb:8: syntax error, unexpected tSYMBEG, expecting end t.string :email, null: fal... ^ /Users/〇〇/projects/〇〇/db/migrate/20200730140954_devise_create_users.rb:8: Can't assign to false ...email, null: false, default: "" ... ^~~~~ /Users/〇〇/projects/〇〇/db/migrate/20200730140954_devise_create_users.rb:25: syntax error, unexpected end, expecting end-of-input /Users/〇〇/projects/〇〇/bin/rails:9:in `<top (required)>' /Users/〇〇/projects/〇〇/bin/spring:15:in `<top (required)>' bin/rails:3:in `load' bin/rails:3:in `<main>' とエラーが出てしまいました。 試しにコメントアウトをしてみると、エラー箇所以下のコードに上から順番にエラーが発生していきます。 引き続き解決方法を探りますが、可能でしたらお力添えいただきたいです。
mingos

2020/08/03 03:04

syntax error とあるように、文法エラーです。 これはマイグレーションファイル(20200730140954_devise_create_users.rb)の中身に問題があるという事です。 例えば、「t.string :name, 」だけで終わっている行がありますが、 これではだめですよね。 カンマだけで終わるような書き方はRubyにはありません。 「t.string :name」にしてみてください。
_tonton_

2020/08/03 03:49

ありがとうございます。 誤字に気付いておりませんでした。 修正後、 無事にdb:migrateが実行できました!
takuyandao

2021/02/20 08:53

自分もこの方法で治りました!ありがとうございました!
guest

0

こういうとき、「コマンドでの解決法で改善しませんでした。」ではなく、その時に出てきたメッセージを載せると解決が早いです。
AddImageToUserでmigrationを失敗しているとおもわれます。
db:migrete した時の出力と、そのmigrationファイルを載せてください。
(コメントに、ではなく、質問を編集して<code>を使って)

投稿2020/08/02 23:17

winterboum

総合スコア23347

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

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

_tonton_

2020/08/03 00:09

回答ありがとうございます。 migrationファイルとコマンド実行時のターミナルを追記させていただきました。 ご確認よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問