我的rails应用程序的我的/ db文件夹中有一个 development_structure.sql (rails 2.3.4,ruby 1.8.7),我不确定它到底是做什么的。
答案 0 :(得分:29)
这篇文章已经被我的同事用作参考,但这两个答案并不准确或信息不足。
development_structure.sql是架构的低级转储,当您开始使用专有数据库功能时,这是必需的 - 无论您是否愿意,您将在某些时候使用它们。
关于存储与否的问题,存在一些争论。这是一篇内容丰富的帖子:http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/。 我对此的看法如下。
对于任何给定的提交,development_structure.sql的目标是使用代码同步数据库结构,而无需事先了解模式结构,也就是说,不必依赖于预先存在的状态。架构以获得新架构。
简而言之,通过提供架构结构,无论何时更改分支/提交,都可以直接加载它并忘记它。 这主要适用于动态和“拥挤”项目,其中不同的分支在底层模式结构上存在差异。
如果没有存储架构结构,您需要始终在数据库中使用现有的引用架构,并在每次更改分支/提交时将其向前或向后迁移;几个真实案例可能会使此过程效率低下(例如,当另一个分支没有您当前的某些迁移,或者某些迁移无法回滚时)。
另一个问题是自动构建,它遇到了同样的问题,更糟糕的是,它们无法应用手动更改。
唯一的缺点是它需要一定的习惯,即每次运行迁移时都要存储它。容易说,但也容易忘记。
我不是说你不能没有develop_structure.sql - 你当然可以。 但是,如果你拥有它,在更改分支/提交时,你只需要加载并忘记;如果你不这样做,你[可]必须经过一系列手动步骤。
答案 1 :(得分:21)
您不应将其添加到您的git存储库。
当您使用配置为连接mysql数据库的database.yml运行迁移时,它是由rails自动创建的文件。 您可以将其视为schema.rb
的替代方法我相信你可以通过添加你的environment.rb强制rails来创建它.rb:
config.active_record.schema_format = :sql
当存在时,该文件用于例如:
rake db:test:clone_structure
修改强>
Ruby On Rails指南中的相关部分。 http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you
他们建议将其检入维基上的源代码管理中。
我个人喜欢把它排除在外。我希望能够非常快速地运行所有迁移。这对我来说是一个好兆头。如果迁移变得缓慢,我觉得我不再完全控制我的环境了。迁移缓慢通常意味着我的开发数据库中有大量数据,我感觉不对。
然而,现在似乎是个人品味的问题。 按照你的直觉来说明这一点。
答案 2 :(得分:1)
当您运行rake任务以将开发数据库克隆到测试数据库时,会创建它。开发数据库输出到SQL,然后读入测试数据库。您可以安全地删除它。
答案 3 :(得分:0)
在rails 3中,你甚至不必写这一行,
config.active_record.schema_format =:sql
您只需运行上面提到的上述rake命令就可以生成这个structure.sql文件