如何从现有的迁移文件的轨道删除脚本

问题描述 投票:0回答:2

我把从git的新的变化,在这个新的变化有一个迁移文件,

def change
  add_column :users, :activated_at, :datetime
  User.all.each do |user|
   user.update(activated_at: user.updated_at)
 end    
end

现在通常如果我想撤销迁移即删除列说activated_at我不得不再跑迁移这样做这是罚款

但如果我只是想删除脚本即user.update(activated_at: user.updated_at),我必须创建另一个迁移还是我刚刚从迁移删除脚本。

注意:我不想删除activated_at专栏中,我只是想删除脚本

ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-on-rails-3.2
2个回答
2
投票

你可以仅仅删除代码,并在主分支提交。

对于在其上运行此迁移系统,可以运行rake task运行任何你想要回滚(即集activated_on为零)。或者你也可以从轨控制台设置为零运行。

而对于新系统,你会克隆,并创建数据库和运行迁移,你去掉代码不会与脚本取得联系。


0
投票

我的答案是多了几分细致入微。总之你问:你可以改变一个已经运行迁移?一般来说,我会建议反对。你的情况,也要看有什么用activated_at场的情况发生,我可以想像它只会设置一旦用户被“激活”(不管这可能意味着在你的应用程序的情况下)。因此,在这种情况下:将其设定为updated_at是错误的,必须是“未设置”?或以不同的方式设定?因此,这将无论如何需要迁移。或者,也可以:迁移尚未例如运行您的生产服务器和运行这样的迁移将是非常艰难的一个好办法撤消(以及在这种情况下,它会被简单--set激活,在为nil再次),然后通过各种手段适应迁移,提交并在部署它会运行一个更好的迁移。但是......你必须手动恢复/修复上的迁移并运行所有机器的情况(你的机器,你colleguaes,分期测试平台?...)

因此,为了帮助您的决策过程

  • 如果你在一个团队中工作,队友已签出你的代码和运行迁移,使用新的迁移来修复它
  • 如果你已经部署到,否则你将不得不解决任何服务器(测试/分期/生产),添加新的迁移来修复它
  • 如果你还没有推你的代码master(所有的代码一直保持本地),适应随意迁移:P

顺便说一句:我看到了开发谁是如此渴望只有在git的“完美”的代码,他们将使用所有选项的git报价清理代码:回顾历史,壁球犯了,我不得不承认,结果是非常清楚。这是非常诱人的和可以理解的,但恕我直言,我们宽松的信息(我们是如何到达这里,为什么?)。同样很容易让人有干净的和最小的迁移,但我个人认为,没有遗憾,Git和迁移过程的“秀”问题区域不断增长的认识。我认为这是它被称为“发展中”的原因之一:构建软件是一个非常反复的过程,它是不断变化的,而你的代码(GIT /历史)和迁移允许反映这一点。我的道歉,如果这最后一部分是太元和主观的。

© www.soinside.com 2019 - 2024. All rights reserved.