2012-06-12 45 views
0

我最近增加了DeviseCanCan到我的Rails 3.2.3應用程序,需要運行rake db:migrate才能使它們正常工作。我有,我已經創建的鏈接遷移文件,並以某種方式與當我運行rake db:migrate導軌3移動螺絲起子

== CreateLinks: migrating ==================================================== 
-- create_table(:links) 
rake aborted! 
An error has occurred, this and all later migrations canceled: 

SQLite3::SQLException: table "links" already exists: CREATE TABLE "links" ("id"INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "url" varchar(255), "description" var 
char(255), "created_at" datetime NOT NULL, "points" integer, "updated_at" dateti 
me NOT NULL) 

我試圖運行rake db:migrate:reset發生衝突,但這似乎無能爲力了我的情況。我仍然無法爲我的新寶石運行數據庫遷移。我怎樣才能解決這個問題?我能否以某種方式忽略鏈接遷移?

+0

你嘗試創建一個已經存在的表!刪除你的表「鏈接」或使用「rake db:rollback」,如果這是你最後的遷移,然後再運行「rake db:migrate」。 – tmaximini

+0

嘗試分貝:回滾,但沒有仍然給了我同樣的問題。我怎樣才能刪除表'鏈接'? –

回答

2

sDid您在運行遷移之前手動創建鏈接表?不知何故,你似乎已經讓你的遷移與你的數據庫不同步。

如果您不關心數據庫中的任何數據,您可以先執行rake db:drop,然後執行rake db:migrate。這將吹走數據庫中的所有表並從頭開始再次運行所有遷移。

如果您確實需要維護現有的數據庫表,那麼您可以用unless table_exists? :links語句包裝create_table :links語句。

+0

真棒這個伎倆!非常感謝你 –

+0

哪個技巧?使用rake db:drop或table_exists ?. –

+0

rake db:drop大聲笑.....不知怎的,我的遷移失去了同步,我不知道除了rake db之外的正確命令:migrate和rake db:reset ....再次感謝! –