Posted by ycshen on April 5, 2013 at 5:16am
大家好,
今天我和大家分享一下我在站点迁移中碰到问题,以及从中总结出的经验。
本次我接到个任务就是将网站迁移到Acquia Cloud,但是本地开发时并没有使用Acquia的发行版进行开发。
首先我备份了代码库和数据库。
实验开始了:
-
1、除了sites目录其他所有的代码用Acquia的发行版盖掉了,又下载了 acquia_connector 。在运行update.php完成后,竟然白屏了,这时就轮到registry_rebuild ,这个模块用于重建代码目录结构。
开发环境已过一番折腾之后,感觉还不错。 - 2、第一次见到Acquia Cloud的服务感觉很新鲜很厉害,毕竟这Acquia Cloud的服务很贵的。
因为本网站是作为一个子网站挂到代码库中,因此要following原先的代码结构,所以在sites/all/modules/contrib里面对照了一下公用的模块,然后把其他的模块移到子站目录里面,settings.php和sites.php各种配置完成之后,网站很正常的展示了。 - 3、在检查完站点之后,开始修改内容了。在修改bean的一个block的时候,保存就会出错。在watchdog log,和php log的帮助之下,我去google以及在bean的相关issues中寻求帮助,打了各种patch,试了dev版本都没有结果。我准备自给自足,安装了 commerce_devel,开始了追踪之路,结果表明系统为找到eneity中的一个函数。接着registry_rebuild了一次之后,bean block能编辑了。长松一口气之后,发现虽然能编辑,但是无法新增block。这是什么奇葩的问题。再我不断的为代码设置断点之后发现,数据库中有一条恶心的记录坑死我了。bean在创建的时候会创建revision,在registry_rebuild之前的时候,因外发生了意外报错,导致bean的表中出现了一条vid=0的记录,在这条记录抹杀掉之后站点这下正常运行了。
总结:
在站点迁移的过程中如果模块的目录结构发生变化时,切记先做registry_rebuild。如果在registry_rebuild之前站点对数据库做了操作后报错的话,请先恢复数据库然后第一时间做registry_rebuild。这样会大大减少发生bug的危险。
我在本次的bug中浪费了大量的时间测试,打patch。甚至怀疑php版本。希望我浪费的时间,给别人节约了时间。
大家请随意讨论,如果我说的有什么不对地方请大家纠正。如果有不同的意见和看法也请补充。

Comments
顶一个
以后应该能派上用场~
人人为我, 我为人人。
要谨慎
如果当涉及数据库的操作出现之后再做rebuild,肯能就已经晚了。这次坑到我的是bean这张表里面的revision,但也不保证它会坑到别的什么数据库表。
只要涉及到了数据库操作,而且相关的依赖模块由于目录没有重建没找到一些函数,就有可能在数据库中留下一些脏数据,产生奇怪的影响。