Rails creating migration to add columns to table causes error when running rake db:migrate
migration, ruby, ruby-on-rails, ruby-on-rails-3
Solution
Rails keeps track of the migrations in the "schema_migrations" table of your database. Unless there is an entry for "20120511224920", which is the Devise migration, it will attempt to run it again, which it appears to already exists.
You can add that manually to the table if that is the case.
Problem
I have a model created called "users" and i created a new migration to add some columns to the users table. Now when i run rake db:migrate, I get the error below b/c it's trying to create the users table again ``` $ rake db:migrate == DeviseCreateUsers: migrating ============================================== -- create_table(:users) rake aborted! An error has occurred, all later migrations canceled: Mysql::Error: Table 'users' already exists: CREATE TABLE `users`..... ``` Why is it trying to create the table again? Here's the command i used to create the new migration ``` $ rails generate migration AddDetailsToUsers home_phone:decimal cell_phone:decimal work_phone:decimal birthday:date home_address:text work_address:text position:string company:string ``` The new migration looks like this: ``` class AddDetailsToUsers < ActiveRecord::Migration def change add_column :users, :home_phone, :decimal add_column :users, :cell_phone, :decimal add_column :users, :work_phone, :decimal add_column :users, :birthday, :date add_column :users, :home_address, :text add_column :users, :work_address, :text add_column :users, :position, :string add_column :users, :company, :string end end ``` EDIT 20120511224920_devise_create_users ``` class DeviseCreateUsers < ActiveRecord::Migration def change create_table(:users) do |t| ## Database authenticatable t.string :email, :null => false, :default => "" t.string :username, :null => false, :default => "" t.string :encrypted_password, :null => false, :default => "" ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable t.integer :sign_in_count, :default => 0 t.datetime :current_sign_in_at t.datetime :last_sign_in_at t.string :current_sign_in_ip t.string :last_sign_in_ip ## Encryptable # t.string :password_salt ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at ## Token authenticatable # t.string :authentication_token t.timestamps end add_index :users, :email, :unique => true add_index :users, :reset_password_token, :unique => true # add_index :users, :confirmation_token, :unique => true # add_index :users, :unlock_token, :unique => true # add_index :users, :authentication_token, :unique => true end end ``` 20120619023856_add_name_to_users ``` class AddNameToUsers < ActiveRecord::Migration def change add_column :users, :first_name, :string add_column :users, :last_name, :string end end ``` 20121031174720_add_details_to_users.rb ``` class AddDetailsToUsers < ActiveRecord::Migration def change add_column :users, :home_phone, :decimal add_column :users, :cell_phone, :decimal add_column :users, :work_phone, :decimal add_column :users, :birthday, :date add_column :users, :home_address, :text add_column :users, :work_address, :text add_column :users, :position, :string add_column :users, :company, :string end end ```