我有几十次Rails数据库迁移,这些迁移是在一年内编写的。有没有办法将他们聚合到一个迁移中,以便我现在只会看到数据库的完整DDL语句?我只需要目前的快照,没有我们如何实现的所有历史。Rails中的聚合迁移
2
A
回答
3
这是可能的,但可能不是一个好主意聚合迁移!
也许会问:
- 你为什么要这么做?
- 你真的需要多久才能迁移到VERSION = 0然后再备份一次?
- 是真的被打破了吗? (如果没有,那么不要修复它)
我曾经有同样的问题一次..我结束了只是重新排序我的迁移,因为架构的变化导致它不正确地迁移了/下来了。我会犹豫再次这样做。
如果您有只添加字段或索引的迁移,那么也许您可以将它们与模型的主迁移结合使用 - 但请注意,您不能再现旧的情况,例如,旧的DB转储可能与它们应该与兼容的迁移编号不兼容 - 这可能是反对汇总的最大论据...
从技术上讲,您可以转储架构然后直接加载 - 即一种方法:
rake db:schema:dump
然后使用模式转储文件db/schema的内容创建一个新的迁移。RB
这里有一些类似的问题:
P.S:我认为应该坚持使用旧的迁移编号方案,其中迁移不使用时间戳 - 这对我来说工作得更好(更容易看到其中为了他们)。
例如在你的config/application.rb中的文件:
config.active_record.timestamped_migrations = false
2
您可以简单地将当前模式加载到数据库中。
rake db:schema:load RAILS_ENV=[production, test, etc.]
这将需要的架构的schema.rb
文件的版本,并将其加载到数据库而不运行单独的迁移。
注意:如果您有将数据放入数据库的迁移(例如,默认值),则该数据将不会添加到数据库中。
如果您需要将默认值加载到您的数据库中,那么可以通过自定义rake任务更好地完成,而无需考虑迁移。
2
你不应该使用所有的迁移,以获取数据库启动和运行。当前的schema.rb总是DB看起来像'现在'。
如果您在那里有大量的迁移,定期截取您的迁移是一种很好的做法。我们最终通过我们的一个较大的应用程序来做到这一点,从文件夹中删除了50个良好的迁移,因为唯一重要的是schema.rb。迁移就是这样,迁移并更改数据库的现有状态。他们应该只能运行一次。
相关问题
- 1. Rails/MySql迁移合并
- 2. 聚合物Vaadin Grid v2迁移
- 3. 在Rails迁移中迁移数据
- 4. 标记Rails迁移的迁移
- 5. Rails迁移表
- 6. rails HABTM迁移
- 7. Rails迁移
- 8. 迁移列 - Rails的
- 9. Rails的add_test_data迁移
- 10. C++的Rails迁移
- 11. Rails迁移;合并两个模型
- 12. Rails迁移未生成迁移文件
- 13. Rails DB迁移错误,Rails重新运行以前的迁移?
- 14. Rails迁移问题
- 15. Ruby On Rails迁移
- 16. Rails的迁移问题
- 17. 的Rails:迁移错误
- 18. Rails的继承和迁移
- 19. 未运行迁移的Rails
- 20. Rails的DB迁移 - 权限
- 21. Rails的迁移问题列
- 22. Rails的迁移重构
- 23. SQL移动聚合
- 24. 是否有任何聚合物2迁移工具
- 25. 聚合物1.0布局迁移 - 垂直?=相当于?
- 26. mySQL命令来聚合匹配(Drupal到Wordpress迁移)
- 27. 插入Rails的两个现有的迁移之间的迁移
- 28. 在Rails迁移中的rename_column后保存
- 29. has_one和rails中的迁移问题?
- 30. Rails迁移中的方法名称
感谢您的详细解答。我想要的直接原因是为了能够方便地查看数据库模式。由于Rails更喜欢自己完成许多关系型RDBMS任务(例如,参照完整性,约束),所以我想在一个地方看到它们。 –
'rake db:schema:dump'就是我需要的。 –
很高兴帮助! – Tilo