Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rails项目中的db/development\u structure.sql是什么?_Sql_Ruby On Rails - Fatal编程技术网

rails项目中的db/development\u structure.sql是什么?

rails项目中的db/development\u structure.sql是什么?,sql,ruby-on-rails,Sql,Ruby On Rails,在我的rails应用程序(rails 2.3.4,ruby 1.8.7)的my/db文件夹中有一个development\u structure.sql,我不确定它到底是做什么的 特定环境是否需要它?(我想我在某个地方读到它是用来测试的) 我需要将它添加到我的git存储库吗 它是在运行rake任务将开发数据库克隆到测试数据库时创建的。开发数据库输出到SQL,然后读入测试数据库。您可以安全地删除它 您不应该将其添加到git存储库中 它是rails在运行迁移时自动创建的文件,其中database.y

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

  • 特定环境是否需要它?(我想我在某个地方读到它是用来测试的)
  • 我需要将它添加到我的git存储库吗

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

    您不应该将其添加到git存储库中

    它是rails在运行迁移时自动创建的文件,其中database.yml配置为连接mysql数据库。 您可以将其视为schema.rb的替代方案

    我相信您可以通过在您的环境中添加来强制rails创建它。rb:

    config.active_record.schema_format = :sql
    
    当出现此文件时,例如:

    rake db:test:clone_structure
    
    编辑

    RubyonRails指南中的相关章节。

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

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

    然而,如今这似乎是个人品味的问题。
    根据你的直觉来做这件事。

    这篇文章被我的一位同事用作参考,但这两个答案都不够准确,信息也不够丰富

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

    关于存储与否的问题,有一些争论。这是一篇信息丰富的帖子:。 我的看法如下

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

    简言之,通过使用可用的模式结构,无论何时更改分支/提交,都可以直接加载它并将其忘记。 这主要适用于动态和“拥挤”项目,在这些项目中,不同的分支在底层模式结构中存在差异

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

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

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

    我并不是说没有development\u structure.sql你就无法生存——你当然可以。
    但如果你有它,当改变分支/提交时,你只需加载并忘记;如果没有,您[可能]必须经历一系列手动步骤。

    在rails 3中,您甚至不必写这行

    config.active\u record.schema\u format=:sql


    只需运行上面提到的rake命令,就可以生成这个structure.sql文件

    …除了您应该将它添加到存储库中,就像您应该将schema.rb添加到存储库中一样。将文件放在存储库中的意义在于,在设置新数据库时,您不必运行所有迁移。@MarnenLaibow Koser我在我的repo中有它,它总是更改ID的自动增量值,这非常重要annoying@ecoologic是的,那可能有点烦人。这就是您应该尽可能使用schema.rb而不是structure.sql的原因之一。但是它绝对应该在存储库中。是的,我更喜欢模式,它也是现有字段的一个很好的参考,查看sql并不是因为quickMigration在Heroku上不起作用。例如,Heroku不运行从引擎复制的迁移。它只运行应用程序的那些功能。同样在Heroku上,也不可能在迁移中放置PG的
    COPY
    命令。该迁移和迁移后的所有剩余迁移都将中止。对于Heroku来说,在迁移过程中断时完成数据库创建是一件非常痛苦的事情。我发现Rails迁移只在本地主机上工作得很好,但在部署方面很弱。至少在Heroku上是这样。这和rails 3中的structure.sql是一样的吗?如果是,则应编辑此问题