簡體   English   中英

rails無緣無故地更改schema.rb

[英]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:loadrake db:schema:load 並且比rake db:migrate停止更改我的schema.rb無緣無故。

小心: rake db:schema:load將刪除所有現有數據,並根據現有schema.rb重新創建數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM