本番環境で devise を利用しsign upをした時 Mysql2::Error: Unknown column 'confirmation_token'
Ruby on Railsで簡単な投稿ができるWebアプリケーションを作成中です。
ローカル環境ではDBにsqlite3 を利用し、サインアップが可能だったのですが、本番環境でMySQLを利用して同様の操作をした際に
マイグレーションファイルで設定していないはずのカラムでUnknown column と指摘が入りました。
以下その時のエラーです。
発生している問題・エラーメッセージ
ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'confirmation_token' in 'field list': INSERT INTO `users` (`email`, `encrypted_password`, `confirmation_token`, `confirmation_sent_at`, `name`, `created_at`, `updated_at`) VALUES ('okome@icloud.com', '$2a$12$48oAZDbUrknYnXOLfwwU0.mM80AkSXLRH3XtPSPkBw2apbTsxV0DW', '_ueaoLWR9ZcPHxxxpFBw', '2021-09-20 01:52:10', 'takeshikun', '2021-09-20 01:52:10', '2021-09-20 01:52:10')):
該当のソースコード
ruby
1デバイスを使用しているマイグレーションファイル 2 3# frozen_string_literal: true 4 5class DeviseCreateUsers < ActiveRecord::Migration[5.2] 6 def change 7 create_table :users do |t| 8 ## Database authenticatable 9 t.string :email, null: false, default: "" 10 t.string :encrypted_password, null: false, default: "" 11 12 ## Recoverable 13 t.string :reset_password_token 14 t.datetime :reset_password_sent_at 15 16 ## Rememberable 17 t.datetime :remember_created_at 18 19 ## Trackable 20 # t.integer :sign_in_count, default: 0, null: false 21 # t.datetime :current_sign_in_at 22 # t.datetime :last_sign_in_at 23 # t.string :current_sign_in_ip 24 # t.string :last_sign_in_ip 25 26 ## Confirmable 27 # t.string :confirmation_token 28 # t.datetime :confirmed_at 29 # t.datetime :confirmation_sent_at 30 # t.string :unconfirmed_email # Only if using reconfirmable 31 32 ## Lockable 33 # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts 34 # t.string :unlock_token # Only if unlock strategy is :email or :both 35 # t.datetime :locked_at 36 37 t.string :name 38 t.string :image_id 39 40 41 t.timestamps null: false 42 end 43 44 add_index :users, :email, unique: true 45 add_index :users, :reset_password_token, unique: true 46 # add_index :users, :confirmation_token, unique: true 47 # add_index :users, :unlock_token, unique: true 48 end 49end 50
# devise/registrations/new.html.erb(form_withの行以外はデフォルト) <h2>Sign up</h2> <%= form_with model: @user, url: user_registration_path, local: true do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <!--ユーザー登録時に名前を追加--> <div class="field"> <%= f.label :name %><br /> <%= f.text_field :name, autofocus: true %> </div> <!-- --> <div class="field"> <%= f.label :email %><br /> <%= f.email_field :email, autofocus: true, autocomplete: "email" %> </div> <div class="field"> <%= f.label :password %> <% if @minimum_password_length %> <em>(<%= @minimum_password_length %> characters minimum)</em> <% end %><br /> <%= f.password_field :password, autocomplete: "new-password" %> </div> <div class="field"> <%= f.label :password_confirmation %><br /> <%= f.password_field :password_confirmation, autocomplete: "new-password" %> </div> <div class="actions"> <%= f.submit "Sign up" %> </div> <% end %> <%= render "devise/shared/links" %>
試したこと
・本番環境で使われているマイグレーションファイルと相違無いかの確認。
・エラーで要求されたカラムのコメントアウトを外して一度migrateしてみる。(入力メールアドレスに本登録用のURLを送信→そのURLから登録完了という処理になるが今回は利用したくない)
・本番環境にてMySQLに入り、show tableでテーブル内に余計な情報が入っていないかの確認
補足情報(FW/ツールのバージョンなど)
※補足としてですが、この前にactionmailerを利用し、
メールアドレスから本登録を行ってもらおうとしていましたが、断念しました。
そのときの
20210910073029_devise_create_users.rb 内 ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable
これらのコメントアウトを外して
$bundle exec rails db:migrate RAILS_ENV=production を実行しています。
もちろんその後
$RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rails db:drop
で一度DBのリセットを行ってから、再度migrateを試みています。
※ご指摘頂けたので追加します、その時のモデルファイルです。@neko_daisuki より 2021/09/20
当時のモデルです(user.rb) class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable # 断念する前はここに :confirmable と追加していました! # 適切なメールアドレスだけが登録できるように正規表現追加 TRUE_EMAIL = /[\w]+@[a-z]+.[a-z]+.?[a-z]+/ validates :email, presence: true, format: { with: TRUE_EMAIL} has_many :posts, dependent: :destroy has_many :post_comments, dependent: :destroy has_many :favorites, dependent: :destroy # ユーザーアイコン設定用 attachment :profile_image end
何か影響があるとしたらここかな?と考えているのですが全く解決できていません。
Gemfileは以下の通りです。
# Gemfile source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.6' # Use sqlite3 as the database for Active Record gem 'sqlite3' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of chromedriver to run system tests with Chrome gem 'chromedriver-helper' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] # ユーザー承認機能のために追加 2021/9/10 gem 'devise' # ファイルをアップロード出来るように追加 (画像用) 2021/9/10 gem "refile", require: "refile/rails", github: 'manfe/refile' gem "refile-mini_magick" # 画像のリサイズが行える # 今後たくさんのユーザーが利用する想定でページング機能を追加 2021/09/12 gem 'kaminari','~> 1.2.1' # デザイン・レイアウトのため追加 2021/09/13 gem 'bootstrap', '~> 4.5' gem 'jquery-rails' gem 'font-awesome-sass', '~> 5.13' # MySQLの利用と環境変数利用のため追加 2021/09/18 gem 'dotenv-rails' group :production do gem 'mysql2' end
ご指摘や不明点などありましたら是非お願いします!
回答1件
あなたの回答
tips
プレビュー