SmartRebuild插件与MT预约发布冲突

Movable Type已经好多年了,一直没有尝试过它的预约发布(Scheduled)功能。近日Postshow有这方面的需求,但在配置时却碰到了一个奇怪的问题。按照这里的方法,chmod /path/to/mt/tools/下的run-periodic-tasks文件为755后,直接在shell下运行之,提示:

Subroutine rebuild_phase redefined at /path/to/mt/lib/MT/App/CMS.pm line 4962.

Subroutine start_rebuild_pages redefined at /path/to/mt/lib/MT/App/CMS.pm line 7627.

Subroutine rebuild_pages redefined at /path/to/mt/lib/MT/App/CMS.pm line 7687.

Subroutine rebuild_these redefined at /path/to/mt/lib/MT/App/CMS.pm line 9472.

遇到问题后的第一反应就是用Google和到Movable Type的支持社区查找是否有人碰到过同样问题,没成想竟然空手而归。不甘心啊!看了CMS.pm的源码,没有问题;用wheeljack上的最新代码来替换升级,还是无法解决。怪事了?难道MT在预约发布上单单跟我过不去?既然如此,暂时只能选择放弃吧!

但还是不甘心!

这阵子Apache也不是很稳定,晚上抽空查阅日志文件,从中竟然也发现了上述错误提示。没运行run-periodic-tasks还出现错误,肯定是Movable Type程序载入时即出现了问题。而之前没有人碰到此问题,应该是MT的程序本身能够正常工作,那么问题的症结很可能在某个插件身上。分析所安装的插件源码,发现SmartRebuild的源码中存在

*MT::App::CMS::rebuild_pages = \&rebuild_pages;
*MT::App::CMS::start_rebuild_pages = \&start_rebuild_pages;
*MT::App::CMS::rebuild_phase = \&rebuild_phase;
*MT::App::CMS::rebuild_these = \&rebuild_these;

的代码。删除此插件,再次运行run-periodic-tasks,不再有错误提示出现。至此,问题解决,做此篇日记以测试。

后记:发现自己好像有了Google依赖症,在遇到问题时,多数情况下会不加思索的盲目求救于Google,这样有时会导致问题更加复杂。看起来,还是培养自己具备较强的独立问题分析能力才是王道,看到复杂的文档和代码也不能退却。