gpt4 book ai didi

ruby-on-rails - Rails 无缘无故地更改了 schema.rb

转载 作者:行者123 更新时间:2023-12-02 17:49:02 24 4
gpt4 key购买 nike

每次运行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"

最佳答案

Since the new version of the schema.rb file came with this migration, I shouldn't be updating schema.rb.

这是不准确的。

每次 Rails 运行迁移时,它都会使用数据库作为源来更新 schema.rb 文件。它不会查看现有的 schema.rb 文件,它只是使用数据库中的信息并覆盖它。

看来真正的问题是,在生成 schema.rb 文件时,在两个不同的环境(Ruby、Rails、MySQL、操作系统的不同组合)中运行相同的迁移可能会产生不同的结果.

解决方案是确保 checkin 代码的每个人都尽可能使用相同的软件版本。如果不可能(因为这是 Windows 与 Linux 与 Mac 的区别,并且您不想更改操作系统),您将不得不处理由此带来的不便。

关于ruby-on-rails - Rails 无缘无故地更改了 schema.rb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14842557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com