【问题标题】:Rails MYSQL migrations failing only on TEST?Rails MYSQL 迁移仅在测试时失败?
【发布时间】:2016-11-07 20:42:13
【问题描述】:

我一辈子都搞不清楚这里发生了什么,但是我对 rails 不是很熟悉:

我已经修改了我的 database.yml 文件以指向一个新的 mysql 测试数据库而不是 sqlite。在 dev 上执行 RAILS_ENV=test db:drop db:create db:seed 时,它工作正常。

但是它总是在测试中失败,引用一个表在被其中一个迁移更改时不存在。我尝试了在开发数据库上加载与在测试数据库上加载的完全相同的 .sql 文件,没有错误。

我能够删除测试数据库并复制开发数据库,​​它可以正常工作,但由于某种原因......通过迁移它无法在测试数据库上工作(这是一个新创建的数据库,但也是技术上的开发人员,因为我每次都使用种子文件从头开始删除并重新创建它)

什么会导致这样的事情?迁移在新的 DEV 数据库 (Mysql2) 而不是在新的 TEST 数据库 (Also Mysql2) 上运行良好

具体的错误是抱怨无法更改表,因为它不存在。 (我在 SQL Pro 中确认该表也不存在),但是当迁移在 Dev 数据库上运行时它工作正常(即使在被删除并且上面的命令(但只是在 RAILS_ENV=development 中运行)运行之后。

【问题讨论】:

  • 你跑rake db:test:create了吗?
  • 听起来您正在对某个数据库运行 rake 命令,而不是您认为正在运行的数据库。可能想发布您的 database.yml。您还可以尝试使用 rake db:migrate RAILS_ENV=test 之类的方式指定 rake 命令的目标
  • 也许可以试试rake db:migrate db:test:prepare stackoverflow.com/questions/15169894/…
  • 我运行的所有命令都以 RAILS_ENV=test 开头

标签: mysql ruby-on-rails


【解决方案1】:

当您运行 db:create 时,它所做的只是创建一个完全空的数据库,没有表...您需要运行 db:migratedb:test:prepare 才能使实际表(空数据)成为添加到测试数据库中。

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

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

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

【讨论】:

  • 嗯,它在 db:migration 部分失败了,我知道很多,这就是我正在运行的:RAILS_ENV=test db:drop db:create db:migrate db:seed
  • 好的,(虽然这不是你原来的问题)。如果迁移失败 - 那么您能否更新您的原始问题并添加错误消息,以便我们查看问题所在?
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2016-06-28
  • 2011-10-31
  • 2020-09-07
相关资源
最近更新 更多