gpt4 book ai didi

ruby-on-rails - 升级到 Rails 4.2.6 : rake db:migrate inserting column limits into schema. rb

转载 作者:行者123 更新时间:2023-12-04 19:00:21 27 4
gpt4 key购买 nike

我发现我们的很多专栏都没有 limit: xxx在迁移中突然对列施加了限制,而不是在数据库本身中,而是在我们的 db/schema.rb 文件中。当我们只是在任何环境中进行迁移时,这并不可怕。它变得麻烦的地方是当我们设置新数据库时——它们不再与我们在各种 prod/staging/qa 环境中的数据库相匹配。

我需要找到一种方法来避免这种情况发生。

在任何时候我们添加迁移时,我们最终不得不做一个极其复杂和乏味的事情 git add -p db/schema.rb随着时间的推移,我对我们的 db/schema.rb 文件与任何版本的现实相匹配失去信心。

作为数据点,如果我运行 rake db:migrate在没有新的迁移的情况下,db/schema.rb 被重建并且有一个非常巨大的差异。

最佳答案

根据 Rails 4.2 Release Notes 中的此注释:

The PostgreSQL and SQLite adapters no longer add a default limit of 255 characters on string columns.



和这个评论相关的 Rails Pull Request 14579 :

The db/schema.rb is used to exactly recreate your database. All your string columns were added before 4.2 with an implicit limit of 255. At that time it was not necessary to dump the limit to db/schema.rb because it was the default. Now that we've changed the default to no limit. We must dump these limits to recreate the database.



问题不是新的违约,而是旧违约的反射(reflect)。

为了解决这个问题,我建议运行一个迁移,从相关字段中删除限制,然后重新创建 schema.rb从数据库。这应该会导致新的一致状态。

关于ruby-on-rails - 升级到 Rails 4.2.6 : rake db:migrate inserting column limits into schema. rb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38677030/

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