【问题标题】:Rails 3 - suddenly pending migrations errorRails 3 - 突然挂起的迁移错误
【发布时间】:2013-04-09 13:14:03
【问题描述】:

我突然遇到一个奇怪的错误。当我尝试运行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' 添加此表,然后再次迁移它。

标签: mysql ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

如果这是在开发环境中,并且您的数据库中没有重要数据,则运行

bundle exec rake db:migrate:reset

这将重建架构,但代价是破坏所有数据。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我能够通过使用 Recks 答案和代码重建架构来让一切正常工作

      bundle exec rake db:migrate:reset
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-05-02
          • 2011-07-28
          • 2018-09-24
          • 2010-11-23
          • 2013-08-28
          • 2015-06-10
          • 2013-12-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多