在运行rake db:migrate
的本地计算机上,从db / schema.rb文件中删除了几个add_foreign_key约束,但是当我在开发服务器导轨上运行相同命令时,会将它们重新添加。检查了mysql&rails版本,它们是相同的。有人可以指导/告诉我这里发生了什么吗?
本地计算机:
$ mysql --version
mysql Ver 14.14 Distrib 5.7.23, for osx10.13 (x86_64) using EditLine wrapper
$ rails --version
Rails 4.2.6
$ gem list --local mysql2
*** LOCAL GEMS ***
mysql2 (0.4.4)
开发服务器:
$ mysql --version
mysql Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using EditLine wrapper
$ rails --version
Rails 4.2.6
$ gem list --local mysql2
*** LOCAL GEMS ***
mysql2 (0.4.4)
答案 0 :(得分:0)
首先,您需要了解db/schema.rb
代表ActiveRecord在上一次运行db:schema:dump
Rake任务时对数据库的理解。数据库的结构(如db/schema.rb
中所示)可能与您在db/migrate
目录中看到的结构完全不匹配:迁移可能已添加和删除,数据库选项已更改,外星人,可能已手动进行发生变化(即外部迁移),...
类似FK的外观已添加到开发数据库中,但未添加到生产数据库中,或者已从生产环境中删除(或忽略了它们),因此数据库不同步。使用mysql
CLI工具检查生产数据库,并查看是否有FK。如果他们没有手动或通过仅生产的迁移来同步数据库。您可能需要首先在生产数据库的精确副本上执行此操作,以便在释放生产系统上的混乱之前确保所有FK都有效。
如果您使用“原始SQL”格式来管理架构,则类似的情况适用于db/structure.sql
。