2013-04-09 108 views
3

我突然遇到了一个奇怪的错误。当我尝试运行rake spec我收到:Rails 3 - 突然等待迁移错误

You have 2 pending migrations: 
    20130405105004 CreateReports 
    20130405113839 AddDocumentToReports 

我不知道其中的原因(我跑过去的迁移,所以我必须在数据库和schema.rb数据)。

这里是rake spec --trace

** Invoke spec (first_time) 
** Invoke test:prepare (first_time) 
** Invoke db:test:prepare (first_time) 
** Invoke db:abort_if_pending_migrations (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:abort_if_pending_migrations 
You have 2 pending migrations: 
    20130405105004 CreateReports 
    20130405113839 AddDocumentToReports 
Run "rake db:migrate" to update your database then try again. 

这里是rake db:migrate:status

... 
    up  20121210112419 Create simple captcha data 
    up  20130214110545 Add weeknum to alerts 
    down 20130405105004 Create reports 
    down 20130405113839 Add document to reports 
    up  20121018133601 *** NO FILE *** 
    up  20121018163051 *** NO FILE *** 
    up  20121024124111 *** NO FILE *** 

这里是rake db:migrate

== CreateReports: migrating ================================================== 
-- create_table(:reports) 
rake aborted! 
An error has occurred, all later migrations canceled: 

Mysql2::Error: Table 'reports' already exists: CREATE TABLE `reports` (`id` int(11) DEFAULT NULL auto_increment PRIMARY KEY, `user_id` int(11), `ready_status` tinyint(1) DEFAULT 0, `created_at` datetime, `updated_at` datetime) ENGINE=InnoDB 

Tasks: TOP => db:migrate 

我该如何解决呢?

+0

只是很棘手,但绝对可以工作,你可以先转到先前的版本,通过'rake db:migrate version = xxx'添加此表,然后再迁移它。 – Shrikant1712 2013-04-09 13:29:10

回答

8

如果这是一个开发环境,你必须在数据库中没有重要数据,然后运行

bundle exec rake db:migrate:reset 

这将重建模式,但在的摧毁所有数据的成本。

-1

我有一个类似的问题*没有文件*。我做了rake db:migrate:status,发现rake正在寻找一些旧的迁移,这些迁移是我在migrate文件夹下的另一个文件夹中保存的。所以,我删除了旧的迁移和schema.rb。然后我做了rake db:drop,rake db:create和rake db:migrate。这解决了问题。

0

我能够用Recks答案,并用代码

bundle exec rake db:migrate:reset 
0

重建模式让一切工作有创建瓦特/我与你的Postgres数据库schema_migrations表,您可以通过删除重置迁移状态该表(drop table schema_migrations;)。