128

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

4

3 回答 3

120

上面的 rake db:migrate 在开发环境上运行任何待处理的迁移并更新 db/schema.rb。rake db:test:load 从当前的 db/schema.rb 重新创建测试数据库。在随后的尝试中,最好先运行 db:test:prepare,因为它首先检查挂起的迁移并适当地警告您。

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

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

于 2013-03-02T02:26:25.570 回答
42

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

  • 检查挂起的迁移,并且,
  • 加载测试模式

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

于 2013-03-02T02:29:41.583 回答
2

rake db:test:prepare 是解决此类PG 问题的好方法。

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

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

全部围绕这个错误“PG::UndefinedTable: ERROR: relationship xxxxx does not exist”</p>

于 2015-03-04T15:13:15.813 回答