【问题标题】:Should I ignore schema.rb because extension differs on development/production OS?我应该忽略 schema.rb 因为开发/生产操作系统的扩展名不同吗?
【发布时间】:2013-09-22 14:18:01
【问题描述】:

我的数据库使用 PostgreSQL。我在 Mac 上开发,需要这条线:

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

但是,Linux 上不需要扩展。

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

【问题讨论】:

  • 它似乎不会影响生产。
  • 但是,当我忘记git checkout db/schema.rb时,Git 会抱怨每次拉动
  • 不,我从开发中拉出来,它有enable_extension。在生产中,我会执行以下操作:pullmigrategit checkout schema.rb,然后我才能在下一次使用pull
  • 每次git checkout schema.rb似乎都不对,这就是为什么我觉得我应该忽略schema.rb :(
  • 我不相信 db/schema.rb 在生产或开发环境中被读取。这基本上是测试环境在运行测试时转储模式和重新设置的一种方式。更多信息:stackoverflow.com/questions/9884429/…

标签: ruby-on-rails ruby rake rails-postgresql pg


【解决方案1】:

据我了解,问题在于自动生成的 schema.rb 在生产和开发上会有所不同,因此会导致 git 中的文件发生更改,因为这条额外的行。

这行是由 mac 上的 postgres 适配器生成的吗?如果它是手动添加的,我会尝试将它放在其他地方,也许在初始化程序中(您可以通过这里的某些东西根据平台切换它的使用:Detecting Operating Systems in Ruby)。

【讨论】:

  • 生产中产生的更改不应该在版本控制中。然而,如果您在开发中使用不同的数据库,则该配置中的更改将导致不同的scheme.rb,并扰乱您的版本控制。在这种情况下,如果 scheme.rb 是衍生文件而不是手动编辑,我将忽略它。
【解决方案2】:

我会一直使用迁移。 schema.rb 的缺点是只有红宝石。如果 - 由于某种原因 - 您在迁移中使用纯 SQL,可能使用 BIGSERIAL 而不是 SERIAL 左右,您将遇到 schema.rb 的问题。切换到基于 SQL 的模式转储只能解决部分问题,而不考虑可能需要的数据更正或数据种子。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2010-09-24
    • 2010-09-17
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多