2014-12-11 6 views
0

Я использую свою локальную среду на Mac OS X с Rails 4.RoR дб: мигрировать не работает

При попытке запустить мою миграцию, она не работает.

я получаю следующий результат:

*******-C02MGBVJFD57:myapp *************$ bundle exec rake db:migrate 
Your Gemfile lists the gem faker (>= 0) more than once. 
You should probably keep only one of them. 
While it's not a problem now, it could cause errors if you change the version of just one of them later. 
Your Gemfile lists the gem factory_girl_rails (>= 0) more than once. 
You should probably keep only one of them. 
While it's not a problem now, it could cause errors if you change the version of just one of them later. 
== 20140815221246 AddPasswordDigestToUsers: migrating ========================= 
-- add_column(:users, :password_digest, :string) 
rake aborted! 
StandardError: An error has occurred, all later migrations canceled: 

Mysql2::Error: Duplicate column name 'password_digest': ALTER TABLE `users` ADD `password_digest` varchar(255)/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `query' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `block in execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_adapter.rb:373:in `block in log' 
/Users/*************/.rvm/gems/[email protected]/gems/activesupport-4.1.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_adapter.rb:367:in `log' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/mysql2_adapter.rb:228:in `execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/schema_statements.rb:375:in `add_column' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:649:in `block in method_missing' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:621:in `block in say_with_time' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:621:in `say_with_time' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:641:in `method_missing' 
/Users/*************/workspace/myapp/db/migrate/20140815221246_add_password_digest_to_users.rb:3:in `change' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:595:in `exec_migration' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:579:in `block (2 levels) in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:578:in `block in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:294:in `with_connection' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:577:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:752:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:992:in `block in execute_migration_in_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:1040:in `ddl_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:991:in `execute_migration_in_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:953:in `block in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:949:in `each' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:949:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:807:in `up' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:785:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>' 
ActiveRecord::StatementInvalid: Mysql2::Error: Duplicate column name 'password_digest': ALTER TABLE `users` ADD `password_digest` varchar(255) 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `query' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `block in execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_adapter.rb:373:in `block in log' 
/Users/*************/.rvm/gems/[email protected]/gems/activesupport-4.1.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_adapter.rb:367:in `log' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/mysql2_adapter.rb:228:in `execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/schema_statements.rb:375:in `add_column' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:649:in `block in method_missing' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:621:in `block in say_with_time' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:621:in `say_with_time' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:641:in `method_missing' 
/Users/*************/workspace/myapp/db/migrate/20140815221246_add_password_digest_to_users.rb:3:in `change' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:595:in `exec_migration' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:579:in `block (2 levels) in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:578:in `block in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:294:in `with_connection' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:577:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:752:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:992:in `block in execute_migration_in_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:1040:in `ddl_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:991:in `execute_migration_in_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:953:in `block in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:949:in `each' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:949:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:807:in `up' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:785:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>' 
Mysql2::Error: Duplicate column name 'password_digest' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `query' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `block in execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_adapter.rb:373:in `block in log' 
/Users/*************/.rvm/gems/[email protected]/gems/activesupport-4.1.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_adapter.rb:367:in `log' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:303:in `execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/mysql2_adapter.rb:228:in `execute' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/schema_statements.rb:375:in `add_column' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:649:in `block in method_missing' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:621:in `block in say_with_time' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:621:in `say_with_time' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:641:in `method_missing' 
/Users/*************/workspace/myapp/db/migrate/20140815221246_add_password_digest_to_users.rb:3:in `change' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:595:in `exec_migration' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:579:in `block (2 levels) in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:578:in `block in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/connection_adapters/abstract/connection_pool.rb:294:in `with_connection' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:577:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:752:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:992:in `block in execute_migration_in_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:1040:in `ddl_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:991:in `execute_migration_in_transaction' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:953:in `block in migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:949:in `each' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:949:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:807:in `up' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/migration.rb:785:in `migrate' 
/Users/*************/.rvm/gems/[email protected]/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:34:in `block (2 levels) in <top (required)>' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

Любая идея, что это неправильно?

EDIT: Схема для пользователей таблицы ниже:

create_table "users", force: true do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "password_digest" 
    t.string "remember_digest" 
    end 

Пользователи Миграция:

class CreateUsers < ActiveRecord::Migration 
    def change 
    create_table :users do |t| 
     t.string :name 
     t.string :email 
     t.string :password_digest 

     t.timestamps 
    end 
    end 
end 

class AddPasswordDigestToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :password_digest, :string 
    end 
end 

class AddRememberDigestToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :remember_digest, :string 
    end 
end 
+0

В этой строке в ваших журналах указано, что столбец уже существует: 'ActiveRecord :: StatementInvalid: Mysql2 :: Ошибка: Дублировать имя столбца 'password_digest': ALTER TABLE 'user' ADD 'password_digest' varchar (255)' - Посмотрите ваш файл 'db/schema.rb', чтобы узнать, существует ли уже столбец' password_digest' (более надежная проверка будет заключаться в непосредственном изучении базы данных mysql). – richsinn

+0

Так это выглядит как таблица пользователей переносится хорошо, но работает ДБ: семя, я получаю: У вас есть 2 ожидающие миграции: 20140815221246 AddPasswordDigestToUsers 20141114000137 AddRememberDigestToUsers Run 'грабли БД: migrate', чтобы обновить базу данных и повторите попытку. – user1072337

+0

Я добавил часть схемы, нет дубликата password_digest – user1072337

ответ

0

Проблема происходит потому, что в вашей CreateUsers миграции, вы уже создает users таблицу с столбец password_digest, подтвержденный этой линией:

t.string :password_digest 

Тогда в вашей AddPasswordDigestToUsers миграции, вы пытаетесь добавить колонку с тем же именем в users таблицы:

add_column :users, :password_digest, :string 

Это где миграция потерпела неудачу с ошибкой Mysql2::Error: Duplicate column name 'password_digest'.

Возможно, вам нужен файл AddPasswordDigestToUsers? Это не похоже на то, что вы уже добавили столбец в миграцию CreateUsers.

Я думаю, вы можете просто удалить файл миграции AddPasswordDigestToUsers и попробовать перезагрузить bundle exec rake db:migrate.

+0

Это была проблема, спасибо. – user1072337

+0

Прохладный. Запуск 'rake db: seed' должен теперь работать. – richsinn

Смежные вопросы