mysql - 如何修复具有许多表的数据库而不使用 Rails 匹配迁移

标签 mysql ruby-on-rails ruby database-migration rails-migrations

我正在帮助 friend 开发 Rails 应用程序。他们有一个数据库,其中包含许多表,这些表是使用 SQL 手动添加的,而不是使用 Rails 迁移。他们已开始正常添加迁移,但需要使两者恢复同步。

如果我们现在添加迁移,它们会出错,因为这些表/列已经存在。如果我们将它们排除在外,人们就必须使用 db:schema:load 来启动和运行,然后按名称一次运行一个迁移以避免错误。我们希望避免这种情况并恢复到健康状态。

有谁知道更好的方法来使迁移与数据库同步?我们必须在不丢失任何数据的情况下执行此操作。

最佳答案

这是question with the same problem (没有投票赞成将您的答案作为重复项关闭,因为旧的答案没有可接受的答案):

解决办法是:

  1. Start by referencing your existing MySQL database in database.yml.
  2. run rake db:schema:dump to generate the schema.rb file
  3. Paste the create_table methods from your schema.rb into a new migration, and Voila!

为了避免任何不一致,您可以随时检查该表是否已经存在,如果是,则完全跳过迁移:

class CreateTable < ActiveRecord::Migration
  def change
    unless ActiveRecord::Base.connection.table_exists?('table_name')
      create_table :table_names do |t|
        # some columns
      end
    end
  end
end

关于mysql - 如何修复具有许多表的数据库而不使用 Rails 匹配迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729706/

相关文章:

MySQL - 联合和排序/排序行

mysql - SQL 连接出错

ruby-on-rails - 测试用例中的随机查询执行时间

ruby-on-rails - Thinking Sphinx - 增量索引不起作用

ruby-on-rails - 如何验证字符串的第一个字符不是整数?

mysql - 向具有外键约束的表添加行 [MySQL]

ruby-on-rails - 如何在 Ruby-On-Rails 应用程序的用户模型中存储数组?

ruby-on-rails - 升级 Ruby 和 Rails 后如何诊断内存泄漏?

ruby - 为什么我不能用 yum 安装最新版本的 ruby​​?

php - 您在应用程序中使用什么 MySQL 日期/时间类型,为什么?