【问题标题】:I need some rails migration help for adding/removing foreign_key我需要一些 Rails 迁移帮助来添加/删除 foreign_key
【发布时间】:2018-09-18 16:46:05
【问题描述】:

在我运行 rake db:migrate 的本地计算机上,从 db/schema.rb 文件中删除了几个 add_foreign_key 约束,但是当我在开发服务器上运行相同的命令时,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)

【问题讨论】:

  • 您是否只从架构文件中删除?如果是,那么这将不起作用。您需要创建一个新的迁移文件,您将在其中删除外键约束。
  • 我没有删除任何东西。当我运行命令时,Rails 会这样做。
  • 好的。首先,我认为问题不在于 rails 或 mysql 版本。大胆猜测一下,您是否正在与可能推送具有 add_foreign_key 约束的架构文件的人合作?
  • db/schema.rb 是生成schema.rb 时当前存在的数据库的表示形式,它不一定取决于迁移中的内容,它取决于数据库的结构。因此,使用mysql CLI 工具查看您的生产数据库并查看 FK 是否存在,如果不存在则添加它们并重新生成schema.rb。当然,您应该首先使用生产数据库的精确副本对此进行测试,并为出现问题做好准备。
  • 迁移代码可以分享吗?你能检查一下开发服务器和本地的配置文件吗?

标签: mysql ruby-on-rails mysql2


【解决方案1】:

首先你需要了解db/schema.rb代表了上次运行db:schema:dump Rake任务时ActiveRecord对你的数据库的理解。数据库的结构(如db/schema.rb 中所见)可能与您在db/migrate 目录中看到的完全匹配,也可能不完全匹配:迁移可能已添加和删除,数据库选项已更改,外星人,可能已手动更改(即外部迁移),...

看起来 FK 已添加到您的开发数据库中,但未添加到您的生产数据库中,或者它们已从生产中删除(或被忽略),因此您的数据库不同步。使用mysql CLI 工具检查您的生产数据库并查看 FK 是否存在;如果他们没有手动同步您的数据库或仅用于生产迁移。您可能希望首先在生产数据库的精确副本上执行此操作,以便确保所有 FK 都有效,然后再在生产系统上释放混乱。


如果您使用“原始 SQL”格式来管理您的架构,类似的事情也适用于 db/structure.sql

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多