mysql - Rails MYSQL 迁移仅在测试时失败?

标签 mysql ruby-on-rails

我一生都无法弄清楚这里发生了什么,但是我对 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:migratedb:test:prepare 以便将实际表(空数据)添加到测试数据库中。

所以你通常的运行应该是:db:drop db:create db:migrate db:seed

但是... db:seed 不会按照您希望的方式工作...每次测试都会完全清空数据库中的数据(这是为了防止交叉污染)测试数据),db:seed 是向您的开发环境添加数据。

在测试环境中,您需要将任何种子数据复制到固定装置中(或使用适当的工厂)。

关于mysql - Rails MYSQL 迁移仅在测试时失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474224/

相关文章:

ruby-on-rails - Ruby on Rails 呈现部分未定义的局部变量

ruby-on-rails - GemNotFound 在开发中使用时抽取

MySQL - 无向图表示

ruby-on-rails - 将 Node 模块导入到 Rails 中

mysql - 如何创建跨 windows/linux 环境的脚本

python - 在 Python 2.7 中使用带有 mysql.connector 的参数化查询

javascript - Rails 和 jQuery 有时不工作

ruby-on-rails - 从助手规范中获取 'action_name' 或 'controller'

php - 为什么这个 PHP/SQL 不创建表?

mysql - 参数 2 中的 JSON 文本无效 - 使用 Spring JPA 的 json_contains