2013-11-01 21 views
0

昨天我在Rails 3.2.14中向我們的生產數據庫添加了一些多列索引,當我運行遷移時失敗了一個錯誤,指出請求的索引已經存在。但是,它不在schema.rb文件中。我發現這有點莫名其妙。我沒有創建索引,也找不到創建它們的遷移。Rails的schema.rb總是顯示所有索引?

該應用程序的開發數據庫是SQLite,但生產數據庫是MySQL。是否有可能在一個開發遷移中創建了該索引,該遷移正在開發中,但在投入生產之前進行了編輯/回滾,並且SQLite未刪除該索引? schema.rb總是顯示所有索引,或只顯示由遷移顯式添加的索引?

回答

0

根據Rails指南,答案是肯定的。 Schema.rb反映數據庫中的表,列和索引,但請記住只有在db名稱空間中運行大多數耙式命令時纔會更新它。

如果:ruby被選中,那麼模式存儲在db/schema.rb中。如果你看一下這個文件,你會發現它看起來極像是一個非常大的遷移:

[架構示例]

在許多方面,這是它到底是什麼。 該文件通過檢查數據庫並使用create_table,add_index等表示其結構來創建。因爲這是獨立於數據庫的,所以它可以加載到Active Record支持的任何數據庫中。如果您要分發能夠針對多個數據庫運行的應用程序,這可能非常有用。

來源:http://guides.rubyonrails.org/migrations.html#types-of-schema-dumps

相關問題