Rails 3 - 突然出现待处理的迁移错误

3

我突然遇到了一个奇怪的错误。当我尝试运行rake spec时,我收到以下信息:

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

我该怎么解决这个问题?

这很棘手,但肯定可行。你可以先回到之前的版本,在那个版本中通过 'rake db:migrate version=xxx' 添加了这个表,然后再次迁移它。 - shrikant1712
4个回答

10

如果这是在开发环境中,并且您的数据库中没有重要数据,那么运行以下命令:

bundle exec rake db:migrate:reset

这将重建模式,但代价是摧毁所有数据。


0

通过Recks的答案和代码重新构建模式,我成功地使一切正常运作。

bundle exec rake db:migrate:reset

0

在您的Postgres数据库中创建了一个schema_migrations表,您可以通过删除该表(drop table schema_migrations;)来重置迁移状态。


-1

我曾经遇到过与*无文件*类似的问题。我运行了rake db:migrate:status命令,发现rake正在寻找我保存在迁移文件夹下另一个文件夹中的一些旧迁移文件。因此,我删除了旧的迁移文件和schema.rb文件。然后我运行了rake db:drop、rake db:create和rake db:migrate命令。这解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接