Rake db:迁移错误,表已经存在

时间:2015-08-30 12:06:37

标签: ruby-on-rails-4 sqlite dbmigrate

我不小心创建了一个我不需要的迁移,因此我删除了该文件,并在我尝试运行rake db:migrate时创建了一个新的迁移我不断收到此错误。我是使用SQlite3 gem和Ruby on Rails 4

StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::SQLException: table "categories" already exists: CREATE TABLE "categories" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "category_name" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NO
T NULL) D:/muse/db/migrate/20150830113519_create_categories.rb:3:in `change'
D:in `migrate'
ActiveRecord::StatementInvalid: SQLite3::SQLException: table "categories" already exists: CREATE TABLE "categories" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "category_name" varchar, "created_at" datetime NO
T NULL, "updated_at" datetime NOT NULL)
D:/muse/db/migrate/20150830113519_create_categories.rb:3:in `change'
D:in `migrate'
SQLite3::SQLException: table "categories" already exists
D:/muse/db/migrate/20150830113519_create_categories.rb:3:in `change'
D:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

3 个答案:

答案 0 :(得分:4)

当您创建迁移并运行它并希望有机会时,您必须首先回滚:

  

$ bin / rake db:rollback STEP = 1

在此阶段,您可以删除该文件或对其进行修改,然后再次运行迁移_

  

$ bin / rake db:migrate

现在您删除了该文件,您无法回滚。您需要做的是手动删除表或创建一个删除该表的迁移:

  

$ bin / rails生成迁移DropCategoriesTable

这将生成一个迁移文件。编辑它:

class DropCategoriesTable < ActiveRecord::Migration
  def up
    drop_table :categories
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

答案 1 :(得分:4)

这是我的匆忙,因为我正在尝试在不同的分支中做一些样本。所以我这样做并且有效:

rake db:drop
rake db:reset or rake db:setup

答案 2 :(得分:0)

您是否想要彻底清除桌子?如果是这样,只需删除迁移文件就不会将其删除,因为它已经迁移到您的数据库。如果您尝试更改或删除表,则需要启动新的迁移并使用“ALTER TABLE”。我建议查看这个stackoverflow链接:How to delete or add column in SQLITE?