修改现有的迁移文件有什么危险吗



我最近开始工作的一家公司在某个时间点成功删除了他们的一个迁移文件,或者至少我相信这一点。这个文件创建了一个users的表,但是这个表已经被删除了。

如果不是因为本地构建项目会失败,我通常不会介意,除非我在包括该表创建在内的早期迁移中临时硬插入,这是因为以后的迁移会修改这个假定的users表上的列,并最终删除该表。我最近所做的只是将它添加到一个现有的迁移文件中,该文件正在创建另一个表,比如products,我一直在从一个分支"携带"到另一个分支,非常小心不要提交它

它看起来像这样(示例(:

class AddProductsTable < ActiveRecord::Migration
def change
create_table :products do |t|
end
end
end

我已更改为:

class AddProductsTable < ActiveRecord::Migration
def change
create_table :products do |t|
end
create_table :users do |t|
end
end
end

我本质上想知道这样做是否会对生产造成任何损害。毕竟,迁移已经运行了,所以不会再执行了?我很想这么做,因为当我需要重建时,总是记得重新创建或拖着这段代码,这已经很快过时了,但我对不会发生不好的事情没有足够的信心,也没有在谷歌上找到太多答案。

PS。,我是该项目目前唯一的开发人员,他们没有任何其他开发人员可以问我这个问题。

如果您还没有运行迁移,那么编辑迁移文件没有问题否则:引用导轨:

通常,编辑现有迁移不是一个好主意。如果现有版本的迁移已经在生产机器上运行,那么您将为自己和同事创造额外的工作,并导致严重的头痛。相反,您应该编写一个新的迁移来执行您需要的更改。编辑尚未提交到源代码管理的新生成的迁移(或者,更普遍地说,尚未传播到开发机器之外(相对无害。

来源:更改现有迁移

只要迁移是在生产环境中运行的,就不会在生产环境下引起任何问题。如果必须的话,您甚至可以删除它(注意:如果您有其他团队成员,则不建议删除,因为如果他们还没有在本地运行迁移,他们将面临您所面临的问题(。

要检查迁移是否已在给定环境中运行,可以使用以下rake命令:

RAILS_ENV=<environment> bundle exec rake db:migrate:status

例如,在开发中这样做,你会得到:

RAILS_ENV=development bundle exec rake db:migrate:status
up     20190201100000  Add soups table
up     20190301100000  ********** NO FILE **********
up     20190601100000  Add supplies table
up     20190501100000  Remove food column from supplies table
up     20190601100000  Add test table
up     20190701100000  Add foo column to test
up     20190801100000  Add products table
down   20191119030000  I havent ran this

上面的告诉您哪些迁移已经运行(用向上表示(,哪些迁移尚未运行(用向下指示(。它还告诉您是否存在与迁移相关联的文件,或者该文件是否已被删除(请参阅上面没有文件的文件(。当您将项目部署到生产环境时,将运行向下迁移,因此修改向上的迁移不会有任何作用。

我建议您在生产中运行以下操作,以确保您正在修改的迁移具有关闭状态。

RAILS_ENV=production bundle exec rake db:migrate:status

相关内容

最新更新