2014-01-21 55 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