每次我运行rake db:migrate
rails 都会决定更改我的 schema.rb 文件。在某些情况下,这是完全合理的,但在其他一些情况下,它似乎无缘无故地这样做。我感到困惑的情况是,当我从 git 中提取新的迁移和 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"