【问题标题】:rails: preventing bad/conflicting database migrationsrails:防止错误/冲突的数据库迁移
【发布时间】:2017-10-26 01:48:46
【问题描述】:

只是想知道是否可以通过 rubocop 或直接通过 ci 以某种方式阻止这些。

我们最初在我们的主分支上进行了一些迁移:

# migration 1
create_table :some_table do |t|
  t.string :some_col
end

# migration 2
def change
  rename_column :some_table, :some_col, :some_other_col
end

但是,我们也有一个单独的/较旧的分支,其中 some_table 中的列被直接重命名:

create_table :some_table do |t|
  t.string :some_col
end

它被合并/通过了 ci 并在生产中运行而没有任何问题,但是当它在几周后部署到新的测试环境时抛出 No such column: some_table 错误时被捕获。

【问题讨论】:

    标签: mysql ruby-on-rails ruby continuous-integration ruby-on-rails-5


    【解决方案1】:

    引自:rake db:schema:load vs rake db:migrate,解释了这个确切的问题:

    当您向现有应用添加新迁移时,您需要 运行 rake db:migrate,但是当您加入现有应用程序时 (尤其是一些旧的应用程序),或者当你放弃你的应用程序时 数据库,您需要再次创建它,始终运行 rake db:schema:load 加载架构。

    基本上,当您启动新实例时,始终使用db:schema:load 加载初始数据库,从那时起您可以照常迁移。

    【讨论】:

    • 啊,谢谢!仍然有兴趣知道这些是否可以在合并之前被捕获(以可能防止在迁移不是最新的旧环境中出现问题)
    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2015-04-06
    • 2014-01-07
    相关资源
    最近更新 更多