2011-03-07 39 views
23

我正在寻找从schema.rb生成迁移文件。可能吗?从schema.rb生成迁移文件

我目前有很多迁移文件,并希望将所有内容组合到一个主迁移文件中。

我也想我可能在某个时候意外删除了一个迁移文件。

感谢您的任何帮助

+0

虽然技术上可以结合迁移,但我认为这是一个非常糟糕的主意..不要这样做!并使用良好的版本控制系统,例如Git – Tilo 2011-10-02 23:12:13

回答

17

有没有必要这样做。对于新安装,您应该运行rake db:schema:load而不是rake db:migrate,这会将模式加载到数据库中,这比运行所有迁移要快。

你永远不应该删除迁移,当然不会将它们合并。至于意外删除一个,你应该使用version control system,如Git

+5

你能否提供一些证据表明这是个坏主意? – 2011-12-21 11:08:04

+0

@Tomek删除/组合迁移是不好的?这几乎是你永远不想删除旧提交的原因。迁移提供了数据库的历史记录。无论如何,真的没有太大的理由。我曾参与过数百次和数百次迁移的项目,并且早期的迁移已经崩溃,因为无论如何我们无法回滚到那么远以及其他一些原因。但这不是我的决定。就像我说的,尽管大多数情况下,合并迁移没有任何意义(删除不应该完成)。 – 2011-12-21 17:08:42

+0

另外,就像戈登在下面的回答中所说的那样,由于应用程序的延迟状态,可能会导致较旧的迁移被破坏。在几乎所有情况下,都可以通过尽量减少迁移中模型的使用来避免这种情况发生,并且可能会对其进行保留。人们似乎总是害怕在迁移中使用SQL,但这是一种迁移! SQL更耐用,因为它不依赖于你的应用程序。 – 2011-12-21 17:12:42

46

您可以将schema.rb复制并粘贴到迁移中并进行反向日期(例如更改日期),以便现有数据库不会运行它。创建此迁移后,您可以删除所有旧迁移。

我不同意安德鲁,你永远不应该删除迁移。基于模型类的更改,迁移始终意外地中断,修复它们非常不重要。既然我确定你正在使用版本控制,你可以随时回顾历史,如果你需要它们作为参考。

+6

我虚心地建议迁移不应该依赖于模型类,或者随着模型的改变,它们将保证随着时间的推移而打破。如果您需要模型的强大功能,则可以在迁移中包含一个简单的一次性模型定义。 – 2014-01-02 21:34:48

+5

虽然原则上很好,但这在实践中很难实施。 – ghempton 2014-01-03 00:00:46

+0

OMG这是真的!!!!!谢谢! – gzfrancisco 2015-06-11 03:22:14