Rails 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
我该如何解决这个问题?
如果这是在开发环境中并且数据库中没有重要数据,则运行
bundle exec rake db:migrate:reset
这将重建架构,但代价是核对所有数据。
在postgres数据库中创建了一个schema_migrations
表,您可以通过删除该表来重置迁移状态( drop table schema_migrations;
)。
通过使用Recks答案和代码重建模式,我能够完成所有工作
bundle exec rake db:migrate:reset
我有* No File *的类似问题。 我做了一个rake db:migrate:status并发现rake正在寻找我保存在migrate文件夹下的另一个文件夹中的一些旧迁移。 所以,我删除了旧的迁移和schema.rb。 然后我做了rake db:drop,rake db:create和rake db:migrate。 这解决了这个问题。