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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Ruby on Rails

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

データベース

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

Q&A

解決済

1回答

512閲覧

ActiveRecord::PendingMigrationErrorが起こった

HARUPONdesu

総合スコア14

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Ruby on Rails

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

データベース

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

0グッド

0クリップ

投稿2020/04/29 00:03

前提・実現したいこと

突然
Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development
というエラーが出ました。
検索するともう一度、rails db:migrateをすれば直ると書いてあったのですが、直らず、rails sを再度やったりしても直りませんでした。

rails db:migrateを打った時にコマンドに出てくるにエラーは、該当のソースコードにコピペしました。
どうか解決よろしくお願いします。

エラーメッセージ

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

該当のソースコード

C:\Users\nakan_n24xdns\tweetbook>rails db:migrate == 20200428234110 ChangeUsersColumns: migrating =============================== -- add_column(:users, :password_digest, :string) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: duplicate column name: password_digest: ALTER TABLE "users" ADD "password_digest" varchar C:/Users/nakan_n24xdns/tweetbook/db/migrate/20200428234110_change_users_columns.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: ActiveRecord::StatementInvalid: SQLite3::SQLException: duplicate column name: password_digest: ALTER TABLE "users" ADD "password_digest" varchar C:/Users/nakan_n24xdns/tweetbook/db/migrate/20200428234110_change_users_columns.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: SQLite3::SQLException: duplicate column name: password_digest C:/Users/nakan_n24xdns/tweetbook/db/migrate/20200428234110_change_users_columns.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)

試したこと

ここに問題に対して試したことを記載してください。

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

windows10

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

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

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

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

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

guest

回答1

0

ベストアンサー

duplicate column name: password_digestとあるように、すでにあるカラムをマイグレーションで追加しようとしてしまっているようです。

既存のカラムで問題ないなら、password_digestの追加部分をマイグレーションから削って、改めてmigrateを行ってみましょう。

投稿2020/04/29 00:18

maisumakun

総合スコア145192

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

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

HARUPONdesu

2020/04/29 00:24

返信ありがとうございます。 おそらく今回のエラーの原因であるchange_users_columnsには、 class ChangeUsersColumns < ActiveRecord::Migration[5.2] def change add_column :users, :password_digest, :string remove_column :users, :password, :string end end と設定したのですが、念のために、どこを削ればいいか、教えてくださると助かります。
maisumakun

2020/04/29 00:33

まずは、データベース自体の構造を確認してください。 password_digestが存在するとなると、password列も存在せず、「そもそもこのマイグレーション自体が不要」となることも考えられます。
HARUPONdesu

2020/04/29 00:40 編集

前にpassword_digestを設定していたマイグレーションが見つかったので、削除して、rails db:migrateをしたのですが、相変わらずエラーが出てるみたいなんです。 何か僕が悪いんでしょうか?
maisumakun

2020/04/29 00:51 編集

> 相変わらずエラーが出てるみたいなんです。 エラーの内容もそのままですか?変化していますか?エラーは「出たという事実」より「エラーの内容」のほうが遥かに重要です。
HARUPONdesu

2020/04/29 00:55

エラーの内容はなったく変わってません。 Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development 相変わらずrails db:migrateをしろと書いてあります。
maisumakun

2020/04/29 00:59

> エラーの内容はなったく変わってません。 そこではなく、SQLiteが出しているエラーの方を見てください。「duplicate column name: password_digest」が出続けているのですか?
HARUPONdesu

2020/04/29 01:03

とりあえずこのようなエラーが出ておりました。 activerecord (5.2.4.2) lib/active_record/migration.rb:579:in `check_pending!' activerecord (5.2.4.2) lib/active_record/migration.rb:556:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' activesupport (5.2.4.2) lib/active_support/callbacks.rb:98:in `run_callbacks' actionpack (5.2.4.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/executor.rb:14:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call' web-console (3.7.0) lib/web_console/middleware.rb:135:in `call_app' web-console (3.7.0) lib/web_console/middleware.rb:30:in `block in call' web-console (3.7.0) lib/web_console/middleware.rb:20:in `catch' web-console (3.7.0) lib/web_console/middleware.rb:20:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call' railties (5.2.4.2) lib/rails/rack/logger.rb:38:in `call_app' railties (5.2.4.2) lib/rails/rack/logger.rb:26:in `block in call' activesupport (5.2.4.2) lib/active_support/tagged_logging.rb:71:in `block in tagged' activesupport (5.2.4.2) lib/active_support/tagged_logging.rb:28:in `tagged' activesupport (5.2.4.2) lib/active_support/tagged_logging.rb:71:in `tagged' railties (5.2.4.2) lib/rails/rack/logger.rb:26:in `call' sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/request_id.rb:27:in `call' rack (2.2.2) lib/rack/method_override.rb:24:in `call' rack (2.2.2) lib/rack/runtime.rb:22:in `call' activesupport (5.2.4.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/executor.rb:14:in `call' actionpack (5.2.4.2) lib/action_dispatch/middleware/static.rb:127:in `call' rack (2.2.2) lib/rack/sendfile.rb:110:in `call' railties (5.2.4.2) lib/rails/engine.rb:524:in `call' puma (3.12.4) lib/puma/configuration.rb:227:in `call' puma (3.12.4) lib/puma/server.rb:675:in `handle_request' puma (3.12.4) lib/puma/server.rb:476:in `process_client' puma (3.12.4) lib/puma/server.rb:334:in `block in run' puma (3.12.4) lib/puma/thread_pool.rb:135:in `block in spawn_thread' Started GET "/" for ::1 at 2020-04-29 09:57:41 +0900 (1.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC ↳ C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/activerecord-5.2.4.2/lib/active_record/log_subscriber.rb:98 ActiveRecord::PendingMigrationError ( Migrations are pending. To resolve this issue, run: bin/rails db:migrate RAILS_ENV=development ): 長い間、お手を煩わせてしまってすみません。
maisumakun

2020/04/29 01:05

rails db:migrateをしたらどのようなエラーになりますか?
HARUPONdesu

2020/04/29 01:07

SQliteの方でしたね、すみません。 C:\Users\nakan_n24xdns\tweetbook>rails db:migrate == 20200428234110 ChangeUsersColumns: migrating =============================== -- add_column(:users, :password_digest, :string) rails aborted! StandardError: An error has occurred, this and all later migrations canceled: SQLite3::SQLException: duplicate column name: password_digest: ALTER TABLE "users" ADD "password_digest" varchar C:/Users/nakan_n24xdns/tweetbook/db/migrate/20200428234110_change_users_columns.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: ActiveRecord::StatementInvalid: SQLite3::SQLException: duplicate column name: password_digest: ALTER TABLE "users" ADD "password_digest" varchar C:/Users/nakan_n24xdns/tweetbook/db/migrate/20200428234110_change_users_columns.rb:3:in `change' bin/rails:4:in `require' bin/rails:4:in `<main>' Caused by: SQLite3::SQLException: duplicate column name: password_digest C:/Users/nakan_n24xdns/tweetbook/db/migrate/20200428234110_change_users_columns.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) このようになっております。
maisumakun

2020/04/29 01:09

「いま実行しようとしているマイグレーションから」password_digestの行は本当に削除しましたか?
HARUPONdesu

2020/04/29 01:14

先ほど貼った class ChangeUsersColumns < ActiveRecord::Migration[5.2] def change add_column :users, :password_digest, :string remove_column :users, :password, :string end end とは別に、前に def change add_column :users, :password_digest, :string end を設定してるマイグレーションがあったので、それだけ削除しました。
maisumakun

2020/04/29 01:16

> 前に(中略)それだけ削除しました。 すでに完了済みのマイグレーションを変更しても、何も影響しません、新規作成したマイグレーションの方に手を入れてください。
HARUPONdesu

2020/04/29 01:20

一旦、マイグレーション自体を削除すればよろしいんでしょうか?
maisumakun

2020/04/29 01:41 編集

> 一旦、マイグレーション自体を削除すればよろしいんでしょうか? 古いマイグレーションは(そこまでロールバックしてやり直すのでもない限り)削除しても無意味です。
HARUPONdesu

2020/04/29 01:43

わかりました。 ならば手順として、まず削除した後、 rails g migration change_users_columns ↓ class ChangeUsersColumns < ActiveRecord::Migration[5.0] def change add_column :users, :password_digest, :string remove_column :users, :password, :string end end ↓ rails db:migrate でよろしいでしょうか?
maisumakun

2020/04/29 01:44

> まず削除した後 何を削除するのですか?
HARUPONdesu

2020/04/29 01:47

class ChangeUsersColumns < ActiveRecord::Migration[5.2] def change add_column :users, :password_digest, :string remove_column :users, :password, :string end end これです
maisumakun

2020/04/29 01:52

同じ内容のマイグレーションで作り直しても意味がありません。 「password_digestの追加」自体が不可能かつ無意味な作業なので、それを取り除いて下さい。
HARUPONdesu

2020/04/29 01:56

僕は、has_secure_passwordで暗号化されたパスワードをpassword_digestに保存しようと思ってたのですが、、、 どうすればいいでしょうか?
maisumakun

2020/04/29 01:58

> どうすればいいでしょうか? すでにpassword_digestカラムは存在するので、それをそのまま使えばいいだけかと思います。
HARUPONdesu

2020/04/29 02:00

ていうことは、結局なにをすればいいんですかね? 理解力なくてすみません、、、
maisumakun

2020/04/29 02:02

> 結局なにをすればいいんですかね? 何もしなくて構いません。
HARUPONdesu

2020/04/29 02:03

エラーはまだ出てるのですが、、、
maisumakun

2020/04/29 02:07 編集

マイグレーション自体を消してください(まさか「マイグレーションが中途半端になった状態で放置する 」とは思っていませんでした)。
HARUPONdesu

2020/04/29 02:12

しっかり復帰しました。 本当に長い間ありがとうございました。 最後に質問なのですが、password_digestを定義しているマイグレーションを削除したのに、password_digestカラムは存在するのでしょうか? それと、一応最低限のセキュリティは考えたいのですが、パスワードはちゃんと暗号化されて保存してあるのでしょうか?
maisumakun

2020/04/29 02:15

> 最後に質問なのですが、password_digestを定義しているマイグレーションを削除したのに、password_digestカラムは存在するのでしょうか? 過去のマイグレーションで生成しているので、今回マイグレーションを削除したのは無関係です。 > パスワードはちゃんと暗号化されて保存してあるのでしょうか? 対応したコードを書いてください。
HARUPONdesu

2020/04/29 02:19

user.rb class User < ApplicationRecord has_secure_password validates :name, {presence: true} validates :email, {presence: true, uniqueness: true} def posts return Post.where(user_id: self.id) end end users_controller.rb def login @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "ログインしました" redirect_to("/posts/index") else @error_message = "メールアドレスまたはパスワードが間違っています" @password = params[:password] @email = params[:email] render("users/login_form") end end なんどもすみません。 この質問に関しては、コードの見せられてる量が少なくて、答えるのが難しいのであれば、適当でかまいません。 本当にありがとうございます。
maisumakun

2020/04/29 02:21

has_secure_passwordで対応できているはずです。
HARUPONdesu

2020/04/29 02:27

すみません。 もう終わったと思ったら、別のエラーが出てきました。 BCrypt::Errors::InvalidHash in UsersController#login 対応してるコードは def login @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "ログインしました" redirect_to("/posts/index") else @error_message = "メールアドレスまたはパスワードが間違っています" @password = params[:password] @email = params[:email] render("users/login_form") end end 特に@user && @user.authenticate(params[:password])だと表示してあります。 今までなかったので、今回のミグレーション削除による影響だと思ったのですが、解決していただけないでしょうか?
maisumakun

2020/04/29 02:30

> 今までなかったので、今回のミグレーション削除による影響だと思ったのですが コントローラーやモデルの書き換えは行っていませんか?マイグレーションの変更より、そちらの影響のほうが可能性が高いです。
HARUPONdesu

2020/04/29 02:35

してません。 念のためにcontroller、modelのコードを全部貼らせてください。 コメント欄でわざわざすみません。 user.rb class User < ApplicationRecord has_secure_password validates :name, {presence: true} validates :email, {presence: true, uniqueness: true} def posts return Post.where(user_id: self.id) end end users_controller.rb class UsersController < ApplicationController before_action :authenticate_user, {only: [:index, :show, :edit, :update]} before_action :forbid_login_user, {only: [:new, :create, :login_form, :login]} before_action :ensure_correct_user, {only: [:edit, :update]} def index @users = User.all end def show @user = User.find_by(id: params[:id]) end def new @user = User.new end def create @user = User.new( name: params[:name], email: params[:email], image_name: "default_user.jpg", password: params[:password] ) if @user.save session[:user_id] = @user.id flash[:notice] = "ユーザー登録が完了しました" redirect_to("/users/#{@user.id}") else render("users/new") end end def edit @user = User.find_by(id: params[:id]) end def update @user = User.find_by(id: params[:id]) @user.name = params[:name] @user.email = params[:email] if params[:image] @user.image_name = "#{@user.id}.jpg" image = params[:image] File.binwrite("public/user_images/#{@user.image_name}", image.read) end if @user.save flash[:notice] = "ユーザー情報を編集しました" redirect_to("/users/#{@user.id}") else render("users/edit") end end def login_form end def login @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "ログインしました" redirect_to("/posts/index") else @error_message = "メールアドレスまたはパスワードが間違っています" @password = params[:password] @email = params[:email] render("users/login_form") end end def logout session[:user_id] = nil flash[:notice] = "ログアウトしました" redirect_to("/login") end def likes @user = User.find_by(id: params[:id]) @likes = Like.where(user_id: @user.id) end def ensure_correct_user if @current_user.id != params[:id].to_i flash[:notice] = "権限がありません" redirect_to("/posts/index") end end end 本当にわざわざすみません。
maisumakun

2020/04/29 02:42

別に質問を立ててください。
HARUPONdesu

2020/04/29 02:44

わかりました。 本当に長い間ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問