2015-02-07 50 views
0

使用Rails 4,我添加了一個遷移,帶來我的架構的最高版本爲軌架構版本並不能反映最新的遷移

我決定,我不再需要這種遷移和恢復我所有的變化由取出並檢查背出主分支 -

,但我發現,運行rake db:reset; rake db:migrate當schema.rb版本仍然設置爲我的不存在遷移,版本,與舊的(和不存在的)遷移仍在我的模式上生效。

我錯過了什麼?爲什麼舊遷移即使不存在,在db重置+遷移後仍然會產生影響?在模式號

$ rm -f db/schema.rb 
$ be rake db:drop; be rake db:create; 
$ ls db/migrate/ 

20141222203059_create_posts.rb 
20141223152011_create_users.rb 
20150121231334_create_api_keys.rb 
20150121235406_drop_user_password_and_add_password_digest.rb 
20150204032843_create_carts.rb 
20150204032904_create_categories.rb 
20150204033026_create_customers.rb 
20150204033441_create_items.rb 
20150204033614_create_sales.rb 
20150204033708_create_shows.rb 
20150204034028_create_venues.rb 

$ be rake db:migrate 
$ be rake db:migrate:status 

database: 

Status Migration ID Migration Name 
-------------------------------------------------- 
    up  20141222203059 Create posts 
    up  20141223152011 Create users 
    up  20150121231334 Create api keys 
    up  20150121235406 Drop user password and add password digest 
    up  20150204032843 Create carts 
    up  20150204032904 Create categories 
    up  20150204033026 Create customers 
    up  20150204033441 Create items 
    up  20150204033614 Create sales 
    up  20150204033708 Create shows 
    up  20150204034028 Create venues 
    up  20150207195208 ********** NO FILE ********** 
    up  20150207200152 ********** NO FILE ********** 
    up  20150207205305 ********** NO FILE ********** 

注的區別:

$ git diff db/schema.rb 
-ActiveRecord::Schema.define(version: 20150204034028) do 
+ActiveRecord::Schema.define(version: 20150207205305) do 

更新/解決方案 我們能夠追蹤這回一個無效的database.yml,其中零是未來通過該數據庫名

回答

1

rake db:reset不更新架構文件,它只是重新應用它並運行種子,更新架構文件的唯一命令是(據我所知)rake db:migraterake db:rollback

在刪除/還原遷移文件之前,您應該已經運行rake db:rollback,如果要解決此問題,您可以檢出舊的遷移文件,然後回滾並再次將其刪除。

+0

我意識到這一點 - 我重置並運行遷移,我編輯我的問題,包括這一點。作爲遷移文件不再存在,它在一個單獨的分支, - 因爲我重置,這將下降並設置數據庫 - 然後我可以重新運行遷移。但不存在的遷移仍然生效 – lfender6445 2015-02-07 21:06:59

+0

運行第二個'rake db:migrate'將不會執行任何操作,因爲'schema.rb'中的模式版本已經晚於最新的遷移文件'rake db:遷移只增加版本,它不能減少它。 – 2015-02-07 21:10:04

+0

如果我重置並遷移,不應該我的模式有最新的遷移作爲版本號? – lfender6445 2015-02-07 21:11:45