我对默认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
任务?
答案 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
示例:
如果您在运行迁移后编写了种子文件,它也会运行它。