Rails in Rails:我应该使用db:reset吗?

时间:2011-12-20 10:45:03

标签: ruby-on-rails rake

我对默认Rails Rake任务的预期用途感到有些困惑,并且想知道我是应该使用db:reset还是编写自定义Rake任务。没有什么聪明的,只是每天的家务管理,而且我可能会错过一个明显的文档,因为我是Rails的新手。

我的问题:我想丢弃我的数据库并从一个完全干净的设置运行,以便我可以确定数据库只包含已知数据。这对于演示准备,调试以及确保Jenkins在测试中进行类似比较非常有用。

目前,我正在写这个:

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

这需要输入很多内容,但只在dev和test数据库中保留种子数据。我不确定这与db:reset有什么不同,这会更方便输入。

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

4 个答案:

答案 0 :(得分:21)

您应该使用:

rake db:reset

这将删除数据库,重新创建,并加载当前架构。

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

rake --describe db

如果您的要求发生变化,那么编写自定义rake任务会更好,您可以在其中应用自己的自定义。

答案 1 :(得分:9)

如果您不确定rake任务的作用,那么我建议不要使用它。在这种情况下,你可能没问题,但是db:reset并不等同于你上面所做的。 db:reset从scheme.rb重新创建数据库,这可能会有所不同,因为您可能已经编写了尚未运行的迁移。

我建议你使用自定义rake任务,然后你可以修改它以适合你的确切目的,特别是如果你想要执行其他任务(例如在git中标记)

答案 2 :(得分:1)

您在通过rake运行的任务中尝试实现的目的是设置测试数据库和开发数据库。 rake db:reset将根据schema.rb为您当前的环境db执行此操作,然后将种子数据加载到db中。一般来说,schema.rb永远不会被编辑,它只是为了一个只知道/仅供参考的目的,但是有些人确实倾向于使用不同的schema.rb,这可能会产生问题:(。对我来说听起来更好的是,如果你需要设置你的开发和测试数据库,然后为dev环境运行你的迁移,并使用schema.rb来创建测试环境db。我肯定会建议你从一些Rails大师那里得到第二个意见,但要找到一个真正的完美实现你想要的方式。

答案 3 :(得分:1)

rake db:reset 这将删除数据库,重新创建它并将当前架构加载到其中。

rake db:reset将运行rake db:seed

示例:

如果您在运行迁移后编写了种子文件,它也会运行它。