我一生都无法弄清楚这里发生了什么,但是我对 Rails 不太熟悉:
我已经修改了我的database.yml 文件以指向新的mysql 测试数据库而不是sqlite。在开发上执行 RAILS_ENV=test db:drop db:create db:seed
时,效果很好。
但是,它在测试中总是失败,引用当被其中一个迁移更改时表不存在。我尝试在开发数据库上加载与测试数据库上完全相同的 .sql 文件,没有错误。
我能够删除测试数据库并复制开发数据库,它可以正常工作,但由于某种原因......通过迁移,它无法在测试数据库上工作(这是一个新创建的数据库,但也是如此)开发人员从技术上讲,因为我每次都使用种子文件从头开始重新创建它)
什么会导致这样的事情?迁移在新的 DEV 数据库(Mysql2)上运行良好,而不是在新的 TEST 数据库(也是 Mysql2)上运行良好
具体而言,错误是提示表无法更改,因为它不存在。 (我在 SQL Pro 中确认该表也不存在),但是当迁移在 Dev 数据库上运行时,它工作正常(即使在被删除并且上面的命令(但只是在 RAILS_ENV=development 中运行)运行之后也是如此。
最佳答案
当您运行db:create
时,它所做的只是创建一个完全空的数据库,没有表...您需要运行db:migrate
或db:test:prepare
以便将实际表(空数据)添加到测试数据库中。
所以你通常的运行应该是:db:drop db:create db:migrate db:seed
但是... db:seed
不会按照您希望的方式工作...每次测试都会完全清空数据库中的数据(这是为了防止交叉污染)测试数据),db:seed
是向您的开发环境添加数据。
在测试环境中,您需要将任何种子数据复制到固定装置中(或使用适当的工厂)。
关于mysql - Rails MYSQL 迁移仅在测试时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474224/