在我的本地机器上运行 rake db:migrate
从db/schema.rb文件中删除了几个add\u-foreign\u键约束,但是当我在dev服务器上运行相同的命令时,rails会将它们重新添加进去。我检查了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)
1条答案
按热度按时间gdx19jrr1#
首先你要明白这一点
db/schema.rb
表示activerecord上次db:schema:dump
rake任务已运行。数据库的结构(如db/schema.rb
)可能与你在照片中看到的完全吻合,也可能不完全吻合db/migrate
目录:迁移可能已经被添加和删除,数据库选项已经更改,外星人,事情可能已经被手动更改(即外部迁移)。。。看起来FK已添加到开发数据库中,但未添加到生产数据库中,或者已从生产数据库中删除(或忽略),因此数据库不同步。使用
mysql
cli工具,查看fks是否存在;如果不同步,则手动或通过仅生产迁移同步数据库。您可能希望首先在生产数据库的精确副本上执行此操作,以便在生产系统上释放混乱之前确保所有FK都有效。类似的事情也适用于
db/structure.sql
如果您使用“原始sql”格式来管理您的模式。