Rake db:migrate 错误,table 已经存在
Rake db:migrate error, table already exists
我不小心创建了一个我不需要的迁移,所以我删除了文件,现在当我尝试 运行 rake db:migrate 时创建了一个新的迁移,我一直收到这个错误。我在 Rails 4
上使用 SQlite3 gem 和 Ruby
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)
您要完全删除 table 吗?如果是这样,简单地删除迁移文件并不能摆脱它,因为它已经迁移到您的数据库中。如果您尝试更改或删除 table,您将需要开始新的迁移并使用 "ALTER TABLE"。我建议查看此 Whosebug link: How to delete or add column in SQLITE? 。
当你创建一个migration并运行它,并且想要创造机会,你必须先回滚:
$ bin/rake db:rollback STEP=1
在此阶段您可以删除文件或修改它,然后 运行 再次迁移_
$ bin/rake db:migrate
既然删除了文件,就不能回滚了。您需要做的是手动删除 table 或创建迁移以删除 table:
$ bin/rails generate migration DropCategoriesTable
这将生成一个迁移文件。编辑它:
class DropCategoriesTable < ActiveRecord::Migration
def up
drop_table :categories
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
这是我遇到的,因为我正试图在不同的分支中做一些样本。所以我这样做并有效:
rake db:drop
rake db:reset or rake db:setup
我不小心创建了一个我不需要的迁移,所以我删除了文件,现在当我尝试 运行 rake db:migrate 时创建了一个新的迁移,我一直收到这个错误。我在 Rails 4
上使用 SQlite3 gem 和 RubyStandardError: 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)
您要完全删除 table 吗?如果是这样,简单地删除迁移文件并不能摆脱它,因为它已经迁移到您的数据库中。如果您尝试更改或删除 table,您将需要开始新的迁移并使用 "ALTER TABLE"。我建议查看此 Whosebug link: How to delete or add column in SQLITE? 。
当你创建一个migration并运行它,并且想要创造机会,你必须先回滚:
$ bin/rake db:rollback STEP=1
在此阶段您可以删除文件或修改它,然后 运行 再次迁移_
$ bin/rake db:migrate
既然删除了文件,就不能回滚了。您需要做的是手动删除 table 或创建迁移以删除 table:
$ bin/rails generate migration DropCategoriesTable
这将生成一个迁移文件。编辑它:
class DropCategoriesTable < ActiveRecord::Migration
def up
drop_table :categories
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
这是我遇到的,因为我正试图在不同的分支中做一些样本。所以我这样做并有效:
rake db:drop
rake db:reset or rake db:setup