1

免责声明:我知道这种rake db:schema:load方法,但我的组织长期以来一直忽略 git 存储库中的 schema.rb 状态,采用迁移方法比让整个团队改变他们的行为更容易。所以请假设我理解该方法的存在,并且我已经测量了它的可行性。请不要对 rails “应该完成”的方式发表评论,因为目前这对我来说不是一个有效可行的选择。

现在我把它从我的系统中拿出来了。

我在跑:

Ruby-on-Rails: v5.2.4.3
Ruby:          v2.6.1p33

我的代码库使用迁移存档方法,我们定期将所有迁移压缩为一个迁移,该迁移实际上是schema.rb文件的快照,然后存档现有迁移。这在我们的本地和测试环境中执行,但不在我们的生产环境中执行。

最近我尝试使用这种方法,但是当我执行测试时,我得到了一堆这些错误:

Mysql2::Error: Field 'id' doesn't have a default value

为了这个问题,可以安全地假设我所有表上的 ID 字段都是使用 Rails 默认方法生成的,并且我没有id在迁移中手动指定。

生成的 schema.rb 生成这种类型的输出:

create_table "profiles", id: :integer, default: nil, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
  ...
end

该块中没有 ID 字段的索引声明,所以我假设 Rails 为我假设了 ID 字段。

问题似乎是schema.rb定义没有假定AUTO_INCREMENTID 字段的默认值。

任何人对为什么会发生这种情况或如何解决它有任何想法?

提前致谢!

4

0 回答 0