只是想知道是否可以通过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
错误时被抓住了。
答案 0 :(得分:1)
引自:rake db:schema:load vs rake db:migrate解释了这个问题:
当您向现有应用添加新迁移时,您需要 运行rake
db:migrate
,但是当你加入现有的应用程序时 (特别是一些旧的应用程序),或者丢弃应用程序时 数据库,你需要再次创建它,总是运行rakedb:schema:load
加载架构。
基本上,当您启动一个新实例时,始终使用db:schema:load
加载初始数据库,然后您可以照常迁移。