【问题标题】:What is db/development_structure.sql in a rails project?Rails 项目中的 db/development_structure.sql 是什么?
【发布时间】:2009-10-13 13:09:07
【问题描述】:

在我的 rails 应用程序(rails 2.3.4,ruby 1.8.7)的 /db 文件夹中有一个 development_structure.sql,我不确定它到底是做什么的。

  1. 某些特定环境是否需要它? (我想我在某处读到它用于测试)
  2. 我需要将它添加到我的 git 存储库吗?

【问题讨论】:

  • 这和 rails 3 中的 structure.sql 一样吗?如果是这样,这个问题应该被编辑

标签: sql ruby-on-rails


【解决方案1】:

这篇文章已被我的一位同事用作参考,但两个答案不够准确或信息量不够。

development_structure.sql 是架构的低级转储,当您开始使用专有数据库功能时,这是必需的 - 无论您是否愿意,您都会在某个时候使用它们。

关于是否存储它的问题,存在一些争论。这是一个内容丰富的帖子:http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/。 接下来是我的看法。

development_structure.sql 的目标是对于任何给定的提交,将数据库结构与代码同步,而无需事先了解架构结构,也就是说,不必依赖于预先存在的状态获取新的架构。

简而言之,通过提供可用的模式结构,每当您更改分支/提交时,您都会直接加载它并忘记它。 这主要适用于动态和“拥挤”的项目,其中不同的分支在底层架构结构上存在差异。

如果没有存储架构结构,您将需要始终使用数据库中现有的参考架构,并在每次更改分支/提交时将其向后或向前迁移;一些实际案例可能会使此过程效率低下(例如,当另一个分支没有您当前拥有的某些迁移,或者某些迁移无法回滚时)。

另一个问题是自动化构建,它会遇到同样的问题,更糟糕的是,它们无法应用手动更改。

唯一的缺点是它需要一定的习惯,即每次运行迁移时都要存储它。说起来容易,也容易忘记。

我并不是说没有 development_structure.sql 你就活不下去 - 当然你可以。 但如果你有它,在更改分支/提交时,你只需加载并忘记;如果不这样做,您 [可能] 必须执行一系列手动步骤。

【讨论】:

    【解决方案2】:

    您不应该将它添加到您的 git 存储库中。

    它是一个由 rails 自动创建的文件,当您使用配置为连接 mysql 数据库的 database.yml 运行迁移时。 您可以将其视为 schema.rb 的替代品

    我相信你可以通过在你的 environment.rb 中添加来强制 rails 创建它:

    config.active_record.schema_format = :sql
    

    如果存在此文件,例如:

    rake db:test:clone_structure
    

    编辑

    Ruby On Rails 指南中的相关部分。 http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

    他们建议将其签入 wiki 上的源代码管理。

    我个人喜欢把它排除在外。我希望能够非常快速地运行所有迁移。这对我来说是一个好兆头。如果迁移变得缓慢,我觉得我不再完全控制我的环境。迁移缓慢通常意味着我的开发数据库中有很多数据,我觉得这些数据有误。

    然而,如今这似乎是个人品味的问题。 跟随你的直觉。

    【讨论】:

    • ...除了您应该将它添加到您的存储库,就像您应该将 schema.rb 添加到您的存储库一样。将文件保存在存储库中的意义在于,您不必在设置新数据库时运行所有迁移。
    • @MarnenLaibow-Koser 我已经在我的仓库中找到了它,它总是在改变 ids 的 auto_increment 值,这很烦人
    • @ecoologic 是的,这可能有点烦人。这是您应该尽可能使用 schema.rb 而不是 structure.sql 的原因之一。但它绝对应该在存储库中。
    • 是的,我更喜欢 schema,它也是现有字段的一个很好的参考,查看 sql 没有那么快
    • 迁移在 Heroku 上效果不佳。例如 Heroku 不会运行从引擎复制的迁移。它只能以难以捉摸的方式运行应用程序的那些。同样在 Heroku 上,不能将 PG 的 COPY 命令放入迁移中。该迁移和它之后的所有其他迁移都将被中止。当迁移过程中断时,Heroku 完成数据库创建是一个巨大的痛苦。我发现 Rails 迁移仅在 localhost 上运行良好,但它们在部署方面很弱。至少在 Heroku 上。
    【解决方案3】:

    它是在您运行 rake 任务以将开发数据库克隆到测试数据库时创建的。开发数据库输出到 SQL,然后读入您的测试数据库。您可以安全地删除它。

    【讨论】:

      【解决方案4】:

      在 Rails 3 中,你甚至不必写这行代码,

      config.active_record.schema_format = :sql

      你可以通过简单的运行上面提到的rake命令来生成这个struct.sql文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        相关资源
        最近更新 更多