我正在关注 rails 教程视频,但我无法弄清楚该db:test:prepare
命令的实际作用。有人可以提供解释吗?
3 回答
上面的 rake db:migrate 在开发环境上运行任何待处理的迁移并更新 db/schema.rb。rake db:test:load 从当前的 db/schema.rb 重新创建测试数据库。在随后的尝试中,最好先运行 db:test:prepare,因为它首先检查挂起的迁移并适当地警告您。
-- http://guides.rubyonrails.org/testing.html
基本上它处理克隆数据库,因此您不必针对测试运行迁移来更新测试数据库。
具体而言,rake db:test:prepare
将执行以下操作:
- 检查挂起的迁移,并且,
- 加载测试模式
也就是说,它将查看您的db/schema.rb
文件以确定您的项目中是否存在任何尚未运行的迁移。假设没有未完成的迁移,它将清空数据库并根据db/schema.rb
文件的内容重新加载它。
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>