运行迁移和种子时遇到错误

时间:2017-05-25 19:33:34

标签: ruby-on-rails

我一直在跑

rake db:drop db:create db:migrate db:seed

正在开发中。这一直很好......直到今天。我的团队中的多个人通过特定的应用程序看到了这一点。现在我们在播种数据库时遇到错误。上次迁移重命名一个列(此迁移已实施两个月)。当seed步骤触发(种子数据已更改为使用下一列名称)时,rake任务崩溃。

这很好用

rake db:drop db:create db:migrate
rake db:seed

我已经回去查看我master中的旧提交,他们也在破坏。奇怪的是,这种情况刚刚开始发生在已知可行的代码上。

Rails 5.0.2,Ruby 2.3.4,Rake 12.0.0

1 个答案:

答案 0 :(得分:1)

我追踪了它。事实证明,早期的迁移有一些代码与User类进行了对话并执行了一些数据转换。通过在迁移中引用User,Rails加载了模型的属性定义。然后又出现了另一个迁移并更改了列名。当我们稍后在种子文件中使用User时,它仍然保持原始属性定义并崩溃。

这解释了为什么单独运行rake db:seed。 Rails有机会重新启动环境并再次读取属性定义。

我们的最终解决方案是删除旧的数据转换,因为它已经应用于prod。只有那些正在重建本地开发环境的开发人员才需要它(当时他们有一个空的数据库,所以没有什么可以转换的。)

另一个解决方案是在数据转换运行后调用User.reset_column_information。这将消除属性定义,并为应用程序提供一个干净的工作状态,以便将来的迁移(和种子文件)。