Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 编辑现有的Rails迁移是个好主意?_Ruby On Rails_Ruby_Ruby On Rails 3_Rails Migrations - Fatal编程技术网

Ruby on rails 编辑现有的Rails迁移是个好主意?

Ruby on rails 编辑现有的Rails迁移是个好主意?,ruby-on-rails,ruby,ruby-on-rails-3,rails-migrations,Ruby On Rails,Ruby,Ruby On Rails 3,Rails Migrations,在开始一个新项目时,模型中有很多更改,我发现编辑现有迁移很容易&运行db:clean或db:reset,而不是创建一个新迁移。当应用程序还没有投入生产时,我会这样做,这意味着我可以毫无顾虑地重置/清理数据库&我是一个人工作,或者是一个小团队的一部分 但是今天,我遇到了以下建议,说这不是一个好主意&不鼓励编辑现有迁移: 编辑现有迁移不是一个好主意:您将创建 为自己和同事做额外的工作会导致严重的头痛 如果已在上运行迁移的现有版本 生产机器。相反,您应该编写一个新的迁移 执行所需的更改。编辑新生成的

在开始一个新项目时,模型中有很多更改,我发现编辑现有迁移很容易&运行
db:clean
db:reset
,而不是创建一个新迁移。当应用程序还没有投入生产时,我会这样做,这意味着我可以毫无顾虑地重置/清理数据库&我是一个人工作,或者是一个小团队的一部分

但是今天,我遇到了以下建议,说这不是一个好主意&不鼓励编辑现有迁移:

编辑现有迁移不是一个好主意:您将创建 为自己和同事做额外的工作会导致严重的头痛 如果已在上运行迁移的现有版本 生产机器。相反,您应该编写一个新的迁移 执行所需的更改。编辑新生成的 尚未提交到源代码管理(或更多)的迁移 一般来说,在您的开发之外还没有传播 机器)相对无害

我想知道:

  • 我会遇到什么潜在的陷阱
  • 这些陷阱是否适用于我的情况(开发阶段,单独工作)
如果您正在与一个团队合作,并且您承诺了迁移,则不会

如果它只在本地环境中,那么只需创建一个新的迁移来修复您所需要的。您可以删除表\列并执行所需操作


因为您清理了数据库并重置了它,所以每个人都会这样做,否则如果他们尝试迁移,就会出现问题

我正在开发一个web应用程序。虽然我是一个人工作,但使用迁移来修改数据库是最好的做法。它可能会留下修改的痕迹,但您可以看到数据库结构的演变。从长远来看,您将能够更快地通过迁移解决数据库问题。

数据库迁移是一种工具。像任何工具箱一样,最重要的是了解它的用途,如何使用它,以及为什么要这样使用它

  • 实时站点:在实时站点中,您不能简单地使用rake:db reset,因为您显然需要所有这些数据
  • 协作:您需要与其他开发人员保持迁移的一致性。如果他们将数据输入数据库(无论出于何种目的)并简单地混入您的代码中,该怎么办。您现在已经完全放弃了他们的努力,他们将被迫重置整个数据库
  • rakedb:rollback:一旦修改了代码,就必须重置,现在就不能运行rollback
  • 这是一个坏习惯:在大多数情况下,礼貌的做法是创建新的迁移。最好养成能够快速高效地创建新迁移的习惯和心态

我并不是真的告诉你不要这么做。这些只是我认为为什么不这样做的要点。我认为大多数情况下,如果你是一个人,或者特别是如果你刚刚开始你的项目(并且可能不会立即意识到您希望数据库的外观/工作方式。直接使用它们可能是最有效的。在您着手研究最佳实践之前,了解原因是很重要的。

是的,我在我当地的环境中。所以我想没问题。只是想确认一下。谢谢回复您也可以从Rails控制台迁移数据库:
ActiveRecord::Migration。一些迁移方法(…)
@tokland我尝试了
ActiveRecord::Migration.up.create\u table(“test”)
它说的是未定义的方法。语法是什么?你为什么不亲自体验一下呢?:)我已经在做了:)这提醒了我,一旦我们在迁移中使用了全局常量,这些常量就在某个constant.rb文件中定义,该文件后来由某个人编辑:)所以关键是,在迁移中始终使用硬编码的值,没有变量,没有常量!但是,如果我只是创建了一个模型&想要更改它,我会发现直接编辑迁移更容易。没有必要在流程的早期留下审计线索。请您添加更多的内容来帮助OP,例如哪些陷阱和/或如何了解什么是“最佳实践”?谢谢(审查)