Rails 3 Rake 克隆测试环境数据库

11
在Rails 3中是否有rake命令可以克隆我的开发数据库数据?我注意到各种博客中都提到了和,但运行它们似乎没有任何作用。此外,未显示任何案例。目前我已经转而加载sql dump,但如果我能克隆现有的开发数据进行最新的测试,那就太好了。
编辑 - 由于我处理的是旧数据,因此我希望在数据库上进行测试,并通过模型过滤器访问。在这种情况下,工厂方法对我无效,因为通过传递的数据被定义为与旧数据不同的架构。

我似乎也失去了 rake db:test:clone -- 你有没有想过如何恢复它? - Aaron Gibralter
我相信他们在Rails 3中将其删除了。 - stillmotion
是的,但 rake db:test:prepare 仍然存在。它只是隐藏了(即没有描述,因此在执行 rake -Tdb 时不会显示)。 - Aaron Gibralter
你最终找到答案了吗? - Abel
1
没事了,应该是 rake db:test:prepare。有机会的话,你应该给予Aaron Gibralter赞扬。 :) - Abel
2个回答

12
rake db:test:prepare虽然在rake -Tdb中不显示,但仍然存在。我想Rails团队决定简化rake -T输出?

1
rake db:test:prepare 不会克隆数据库。难道 OP 想要克隆包括数据在内的数据库吗? - James
1
@Jamsi 是的,但 OP 也问了当你运行 rake -Tdb 时列出的那些 rake 任务发生了什么。事实证明,它们仍然存在,只是因为它们不再有 desc 而没有被列出。 - Aaron Gibralter

2
我建议您不要克隆开发数据库,而是依赖于工厂来为您提供可预测的数据,以适应您的确切测试用例。迟早会出现在数据库中访问可靠的测试数据的依赖性将破坏您的测试。这也会破坏其他参与项目的人的测试。而且对数据的更改/添加不会像您精心构建的工厂一样传播到其他开发人员那里。
请查看Machinist、FixJour、FactoryGirl等工具。它们真正解决了测试数据问题,并将其检入版本控制,以便您的团队可以访问它们。

1
我在大多数测试中都在使用FactoryGirl,但是我正在处理我的数据库中运行的遗留数据,这些数据在访问时会通过过滤器进行处理。因此,我的真正愿望是确保我的模型中的遗留转换过滤器得到测试。就我所了解的工厂而言,我必须通过“create”将所有内容传递,这将创建比我现有数据库中更新的数据标准。 - stillmotion
你能澄清一下吗?数据库模式不同于Rails模式,还是当前存储的数据无法通过验证?简而言之,我想知道的是你如何读取这些数据。 - Steve Ross
这个回答不应该被踩。即使在 OP 已经给出正确答案的情况下,仍然不要克隆你的开发数据库。这种行为是不可重复的,并且会产生脆弱的测试。相反,一个可重复/可维护的选项是执行 SQL 脚本来填充数据库与旧数据。 - cfeduke
OP提到他需要在“生产”数据库上进行操作。这不是一个常规的Rails应用程序,也不应该被“硬塞”到默认的“最佳实践”中。DHH的精神赞同这个评论。 - Simon B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接