[英]rails changes schema.rb for no reason
每次我運行rake db:migrate
rails決定更改我的schema.rb文件。 在某些情況下,這是完全合理的,但在其他一些情況下,它似乎無緣無故地這樣做。 我很困惑的情況是當我從git中提取一個新的migration.rb和一個新版本的schema.rb,然后運行rake db:migrate
。 由於schema.rb文件的新版本附帶此遷移,因此我不應該更新schema.rb。 但是,rails每次都會改變它。 當發生這種情況時,我發現了非常愚蠢的變化,例如:
add_index "my_table", ["column1", "column2"], :name => "index_on_some_columns"
至
add_index "my_table", ["column2", "column1"], :name => "index_on_some_columns"
當發生這種情況時,我只需運行git checkout db/schema.rb
並繼續我的生活,但它讓我永無止境。 是否有這樣做的原因,我怎么能阻止它這樣做?
編輯:這是一個差異的摘錄
@@ -165,12 +165,11 @@ ActiveRecord::Schema.define(:version => 20130206001907) do
t.column "updated_at", :datetime
- t.column "coordinates", :point, :srid => 4326
@@ -200,15 +199,16 @@ ActiveRecord::Schema.define(:version => 20130206001907) do
t.column "something", :boolean
+ t.column "coordinates", :point, :srid => 4326
+ t.column "random_string", :string
t.column "remote", :string
- t.column "random_string", :string
end
- add_index "my_table", ["id", "foreign_id"], :name => "index_active_my_table_on_foreign_and_id"
- add_index "my_table", ["id", "active"], :name => "index_my_table_on_active_and_id"
- add_index "my_table", ["id", "content_modified_at"], :name => "index_my_table_on_content_modified_at_and_id"
+ add_index "my_table", ["foreign_id", "id"], :name => "index_active_my_table_on_foreign_and_id"
+ add_index "my_table", ["active", "id"], :name => "index_my_table_on_active_and_id"
+ add_index "my_table", ["content_modified_at", "id"], :name => "index_my_table_on_content_modified_at_and_id"
由於schema.rb文件的新版本附帶此遷移,因此我不應該更新schema.rb。
這是不准確的。
每次Rails運行遷移時,它都會使用數據庫作為源更新schema.rb
文件。 它不會查看現有的schema.rb
文件,它只使用數據庫中的信息並覆蓋它。
看來真正的問題是,在生成schema.rb
文件時,在兩個不同的環境(Ruby,Rails,MySQL,操作系統的不同組合)中運行相同的遷移可能會產生不同的結果。
解決方案是確保每個簽入代碼的人都在盡可能使用相同的軟件版本。 如果不可能(因為這是Windows與Linux與Mac的區別,並且您不想改變您的操作系統),您只需要處理不便之處。
對我來說,解決方案是制作一個rake db:schema:load
先rake db:schema:load
。 並且比rake db:migrate
停止更改我的schema.rb
無緣無故。
小心: rake db:schema:load
將刪除所有現有數據,並根據現有schema.rb重新創建數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.