在Rails中使用Rake:我应该使用db:reset吗?

15

我有些困惑Rails默认的Rake任务的使用方式,不知道是否应该使用db:reset还是编写一个自定义的Rake任务。我的需求很简单,只是日常维护,并且由于我是Rails新手,可能会忽略一些明显的文档。

我的问题: 我想要清除我的数据库并从完全干净的设置中运行,以确保数据库仅包含已知数据。这对于演示准备、调试和确保Jenkins在测试中进行相似比较非常有用。

当前,我正在编写以下内容:

bin/rake db:drop:all db:create:all db:migrate db:seed db:test:prepare

虽然要打很多字,但这样只在开发和测试数据库中留下种子数据。我不确定这与db:reset有何不同,后者输入更方便。

我应该使用db:reset还是编写自定义的db:from_scratch任务?

4个回答

21

你应该使用:

rake db:reset

这会删除数据库,重新创建它并将当前的模式加载到其中。

有关rake db任务的完整列表:

rake --describe db
如果您的要求发生变化,那么编写自定义rake任务会更好,这样您可以应用自己的定制。

所以具体来说,重置并没有解决我的问题,即测试数据库与(空白)开发数据库相同,并包含种子数据。自定义听起来更清晰。 - David Kennedy

9
如果你不确定 rake task 是什么,我建议你不要使用它。在这种情况下,你可能还好,但是 db:reset 与你上面所做的操作不同。db:reset 是从 scheme.rb 重新创建数据库,而这可能会有所不同,因为你可能编写了尚未运行的 migrations。
我建议你使用自定义 rake task,这样你就可以修改它以适应你的精确目的,特别是如果你还想执行其他任务(例如 git 中的标记)。

稍微更清晰的解释,谢谢。这让我确认需要编写自定义任务。 - David Kennedy

1
这将删除数据库,重新创建并加载当前模式。 将运行rake db:seed <例子:> 如果您在运行迁移后编写了种子文件,则也会运行该文件。


1
你正在尝试通过rake运行的任务中实现的目标是设置测试和开发数据库。 rake db:reset 只会针对当前环境下的db执行此操作,根据schema.rb加载种子数据到db中。通常情况下,不会编辑schema.rb文件,它只用于了解/参考,但有些人可能会有不同的schema.rb文件,这可能会导致问题:(。对我来说更好的做法是,如果您需要设置开发和测试数据库,则运行dev环境的迁移,并使用schema.rb创建测试环境db。我肯定建议您从一些Rails大师那里获得第二意见,以找到实现您想要的真正完美方法。

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