2014-01-21 54 views
0

在Rails 4.0.0,ruby 1.9.3p392(2013-02-22修订版39386)[x86_64-darwin10.8.0]中使用Rake 10.1.1db:在Rails 4.0.0耙过程中迁移错误

我正在研究Rails中的类的应用程序,我犯了一个错误,并删除了在Git中所做的更改。当我去重做项目,跑耙DB迁移,我得到了以下错误消息:

Joses-MacBook-Air:crumblr JRV$ rails generate migration CreateHearts Post_id:integer 
    invoke active_record 
    create db/migrate/20140120235500_create_hearts.rb 
Joses-MacBook-Air:crumblr JRV$ bundle exec rake db:migrate 
== CreateHearts: migrating =================================================== 
-- create_table(:hearts) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: table "hearts" already exists: CREATE TABLE "hearts" ("id" INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL, "Post_id" integer) /usr/local/rvm/gems/ruby-1.9.3- p392/gems/sqlite3-1.3.8/lib/sqlite3/database.rb:91:in `initialize' 
4.0.0/lib/active_record/railties/databases.rake:42:in `block (2 levels) in <top (required)>' 
Tasks: TOP => db:migrate 
(See full trace by running task with --trace) 

如何摆脱旧表引用的?

+0

你没有说清楚。通过“旧表引用”,你的意思是你想更新你的schema.rb以匹配现有数据库中的内容,或者你想让数据库进入你的代码库期望的状态?您是否更改了迁移的标识符(时间戳)?数据库应该跟踪上次运行的迁移。 – coreyward

回答

4

有几个命令可以使用:

rake db:rollback将回滚最新的迁移

rake db:rollback STEP=3让你超过1点迁移(3在这个例子中)回滚

rake db:reset会删除数据库,重新创建它并将当前模式加载到数据库中。

,如果你要回滚然后再迁移回来了,你可以使用

rake db:migrate:redo STEP=3回滚3迁移和重新迁移

http://guides.rubyonrails.org/migrations.html

+0

这些帮助,但最终工作的命令是耙db:重置。问题是它删除了我的帖子,但它们是测试项目。 – JRVazquez

+0

还有其他一些命令,例如'rake db:seed'运行'db/seed.rb'文件或'rake db:schema:load'来将模式加载到当前数据库中。看看这个链接是否有助于进一步解释: [stackoverflow topic](http://stackoverflow.com/questions/10301794/difference-between-rake-dbmigrate-dbreset-and-dbschemaload) – Aluxzi