rails:防止错误/冲突的数据库迁移

时间:2017-10-26 01:48:47

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

只是想知道是否可以通过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错误时被抓住了。

1 个答案:

答案 0 :(得分:1)

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

  

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

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