Rumah > Soal Jawab > teks badan
目前产品在使用阶段,采用了阿里云ubuntu上部署了一系列东西,如:nginx、phpfpm、mysql、beanstalkd。
产品在初期,代码和数据库经常变更,而且变化非常多,有时数据库的结构都有大调整。
我在这方面没有太多经验。该怎么维护线上代码和数据库,有什么好的方案吗?
看到有了发了这个项目多版本开发,更新数据库结构时的优美方案?,但不是很了解。
怪我咯2017-04-10 14:53:21
感觉楼主没有提到“测试系统”呢? 我描述一下我之前负责的项目的数据库维护方式:首先数据库分为正式库、测试库、开发库。开发人员只能操作开发库,并且每次操作的SQL语句都要提交到SVN(这里要求他们严格按照顺序提交打上时间戳)这里有个建议就是开发人员提交SQL时区分是数据操作语句还是数据结构操作语句分两个文件。测试库由一个人维护,待需要更新测试库时,就把svn中的SQL文件按照时间顺执行。把这些执行通过的SQL文件统一保存,待正式库更新时使用。
原则就是保证更新测试系统和正式系统操作一致。将问题尽量暴露在测试环境中,降低正式环境的风险。
天蓬老师2017-04-10 14:53:21
可以使用Git做本版本管理工具,使用Capistrano进行线上实时部署。这样一旦确认变更,直接把对应的分支部署上去就可以了。
你可以看看这篇文章,Capistrano可以用于部署/维护多种编程语言开发的项目。
ringa_lee2017-04-10 14:53:21
这种问题不同的框架有不同的解决方案。唯一可以无视框架的是手写迁移的sql脚本。可以先把数据库dump下来在本地测试好新的代码和迁移后的数据,然后再到线上更新。当然如何更新线上的数据库和代码是另一个问题了。
怪我咯2017-04-10 14:53:21
代码管理的话推荐git,git的hooks非常好用,在初期利用hook在master分支的每一次提交都可以同步到线上
数据库的话一开始就最好使用第三方的数据库不要自己维护,rds买一台一年也才不到500吧
ringa_lee2017-04-10 14:53:21
代码管理肯定要用git或者svn之类的
楼主的问题是一个管理问题,不能单独用技术去解决
比如团队中每个工程师自己记录对数据库结构的变动,上线时统一集成在一起由经理确定上线改动数据库结构
尽量在功能模块上划分清楚,每个人负责一个或者几个模块,尽量不交叉,这样互相修改对方代码的机会就会少,带来的合并和覆盖就会少,再辅助一些版本控制的流程就会更加容易些