我应该忽略 schema.rb 文件吗,因为开发和生产操作系统上的扩展不同?

11

我的数据库使用PostgreSQL。我在Mac上进行开发,需要添加以下这行代码:

  # db/schema.rb on Mac environment
  enable_extension "plpgsql"

然而,在Linux上不需要使用该扩展。

在这种情况下,我们是否应该忽略schema.rb,并通过db:migrate为开发和生产环境生成它?


似乎不会影响生产。 - Clucking Turtle
然而,每当我忘记“ git checkout db/schema.rb”时,Git在进行拉取操作时都会抱怨。 - Clucking Turtle
不,我从开发环境中拉取代码,其中包含enable_extension。在生产环境中,我会执行以下操作:pullmigrategit checkout schema.rb,然后才能进行下一次的pull - Clucking Turtle
每次都使用 git checkout schema.rb 并不正确,这就是为令人感到应该忽略 schema.rb 的原因 :( - Clucking Turtle
2
我不相信在生产环境或开发环境中会读取db/schema.rb文件。它基本上是测试环境在运行测试时用来导出数据库结构并重新设置的一种方式。更多信息请参考:https://dev59.com/wmkw5IYBdhLWcg3wdKMv - Steven Harlow
2个回答

2
据我理解,问题在于自动生成的 schema.rb 文件在生产环境和开发环境中会有所不同,因此会导致 git 中的文件变化,因为多了这一行代码。
这一行代码是由 Mac 上的 postgres 适配器生成的吗?如果是手动添加的,我建议将其放在其他地方,比如一个初始化程序中(可以通过 Detecting Operating Systems in Ruby 中的某些内容来根据平台切换使用)。

生产环境中生成的更改不应该在版本控制中。然而,如果您在开发中使用不同的数据库,则对该配置进行更改将导致不同的scheme.rb,并干扰您的版本控制。在这种情况下,如果scheme.rb将成为派生文件且不是手动编辑的,则我将忽略它。 - jgomo3

0

我总是会使用迁移。 schema.rb 的缺点是只能使用 Ruby。如果你的迁移中有纯 SQL,可能要使用 BIGSERIAL 而不是 SERIAL 等等,那么你将在 schema.rb 中遇到问题。切换到基于 SQL 的模式转储只解决了部分问题,可能需要进行数据修正或数据种子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接