rake db:test:prepare实际上做了什么?

时间:2013-03-02 02:08:24

标签: ruby-on-rails ruby

我正在关注rails教程视频,但我无法弄清楚db:test:prepare命令实际上做了什么。有人可以提供解释吗?

3 个答案:

答案 0 :(得分:111)

  

上面的rake db:migrate会运行任何挂起的迁移   开发环境和更新db / schema.rb。耙子   db:test:load从当前重新创建测试数据库   DB / schema.rb。在随后的尝试中,首先运行是个好主意   db:test:prepare,因为它首先检查挂起的迁移并发出警告   你适当的。

- http://guides.rubyonrails.org/testing.html

基本上它处理克隆数据库,因此您不必运行针对test的迁移来更新测试数据库。

答案 1 :(得分:38)

具体而言,rake db:test:prepare将执行以下操作:

  • 检查待处理的迁移,
  • 加载测试架构

也就是说,它将查看您的db/schema.rb文件,以确定项目中是否存在尚未运行的任何迁移。假设没有未完成的迁移,它将清空数据库并根据db/schema.rb文件的内容重新加载它。

答案 2 :(得分:2)

rake db:test:prepare对于像this这样的PG问题是一个很好的解决方案。

“PG :: UndefinedTable:错误:关系不存在”与正确的Rails命名和约定“我不能只执行rake db:migrate RAILS_ENV=production

例如,当您无法为所讨论的错误here创建测试数据库时:“PG不可定义的错误关系用户不存在”

全部解决此错误 “PG :: UndefinedTable:ERROR:关系xxxxx不存在”