推动新功能生存的最大风险可能在于新代码所需的数据库修改.在Rails中,我相信它们具有"迁移",您可以在其中以编程方式对开发主机进行更改,然后在使用修订模式的代码中进行相同的更改.如果需要,可以同步方式滚动两个背面.
有没有人遇到过类似的PHP/MySQL工具集?很想听听它,或任何程序或流程解决方案,以帮助降低风险...
我从未遇到过能够完成这项工作的工具.相反,我使用了单个文件,编号以便我知道运行它们的顺序:本质上是Rails迁移的手动版本,但没有回滚.
这是我正在谈论的事情:
000-clean.sql # wipe out everything in the DB 001-schema.sql # create the initial DB objects 002-fk.sql # apply referential integrity (simple if kept separate) 003-reference-pop.sql # populate reference data 004-release-pop.sql # populate release data 005-add-new-table.sql # modification 006-rename-table.sql # another modification...
我从来没有遇到任何问题这样做,但它不是很优雅.由您来跟踪需要为给定更新运行的脚本(更智能的编号方案可能有所帮助).它也适用于源代码控制.
处理代理键值(来自自动编号列)可能很麻烦,因为生产数据库可能具有与开发DB不同的值.因此,如果可能的话,我尝试永远不要在任何修改脚本中引用文字代理键值.
我不相信程序化迁移.如果这是一个简单的更改,例如添加NULLable列,我只需将其直接添加到实时服务器.如果它更复杂或需要更改数据,我将编写一对SQL迁移文件并针对副本数据库进行测试.
使用迁移时,请始终测试回滚迁移.这是你的紧急"哦屎"按钮.