什么是rails项目中的db / development_structure.sql?

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

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

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

当您使用配置为连接mysql数据库的database.yml运行迁移时,它是由rails自动创建的文件。 您可以将其视为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上将其检入源代码控制。

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

然而,现在似乎是个人品味的问题。 按照你的直觉来对付这个。

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

development_structure.sql是模式的低级转储,当您开始使用专有数据库function时,这是必需的 – 无论您是否想要,您将在某个时候使用它们。

关于存储与否的问题,存在一些争论。 这是一篇内容丰富的文章: http : //www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/ 。 我对此的看法如下。

对于任何给定的提交,development_structure.sql的目标是使用代码同步数据库结构,而无需事先了解模式结构,也就是说,无需依赖模式的预先存在的状态来获取新的那一个。

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

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

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

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

我不是说你不能没有develop_structure.sql – 你当然可以。 但是,如果你拥有它,在更改分支/提交时,你只需要加载并忘记; 如果你不这样做,你可能需要经历一系列手动步骤。

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

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

config.active_record.schema_format =:sql

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