原先准备升级到3.11的,后来看到MT的官方网站已经推出了3.2,于是就打算升级到3.2。为此讨厌注册新帐号的我还特地去Movable Type网站去注册了一个TypeKey来下载新版的MT,这也算是对MT的一个支持吧。
在刚才搜索MT备份迁移方法的时候看到两个网站,对我有一点帮助,这里顺便提一下:
车东[Blog^2]的从MT2.6升级到MT3.x,了解了升级过程中需要注意的事项,同时还有官方的升级文档(当然这个文档后面没有用上,因为文档的版本似乎不对,不适合3.2的升级)。
http://zonageek.com/software/mt/typemover/,一个方便迁移MT站点的工具,我看中的功能是:
TypeMover will convert your data from it’s original to the new server character encoding as needed. This is very useful when moving from an MT2 server using ISO-8859-1 into an MT3 server using UTF-8
安装文件下载下来以后,发现里面并没有前面的文档所提及的
mt-upgrade30.cgi 和 mt-upgrade31.cgi,只是有一个README.txt提到了位于http://sixapart.com/movabletype/docs/3.2/01_installation_and_upgrade/的安装文档。
由于有测试站点,所以我可以看看各种安装方式的效果如何。
首先测试的是用新的 MT 程序覆盖旧的 MT 程序,这样的效果是保留一些旧的自己添加的东西,但是个人觉得东西会很乱,not clean. 覆盖好以后,看到mt目录下有一个mt-upgrade.cgi,所以想到应该是web访问的。通过web连上并登录Blog,系统自动发现数据库版本不符合,需要更新,便重定向到更新页面上。更新完毕,重新登录就好了。
另外我发现在mt/tools/下有一个upgrade程序,于是又测试了一遍。直接执行该程序会出错,在mt目录下执行tools/upgrade就OK。它的效果和WEB上更新是一样的。不知道是不是心理因素,觉得 command line 下的会更快一些。
接着测试clean的安装,即重新建一个新的目录,将MT的程序放在里面,再把blog数据库复制进去(复制数据库目录的时候请注意文件权限问题);复制网站配置文件mt.cfg, mt-db-pass.cgi,建议将这两个文件转换到新的配置文件mt-config.cgi中去。虽然3.2版本的MT可以兼容使用mt.cfg和mt-db-password.cgi的信息,但是为了以后版本的兼容性还是转换的好。(Note: mt.cfg and mt-db-pass.cgi will work without any changes under 3.2, but it’s strongly recommended to switch to mt-config.cgi for future compatibility)
这次直接运行command line 的tools/upgrade。登录进去,基本正常。
最后本网站的正式更新用的是最后一种安装方法,基本没有问题,就是原先安装的两个Plug-in不存在了,而模版里又有用到,所以在Rebuild的时候就出错了。目前暂时将相关模版屏蔽掉不Rebuild,等有空的时候,重新写,届时将不再另行通知了。
这里提到的Movable Type(以下简称MT)网站数据库,仅仅指的是用MT创建的Blog网站的数据库,而且这个数据库是以Berkeley DB格式存储在服务器的文件系统上的,默认情况下,应该是在MT程序目录下mt/db里。
由于Blog网站的数据是以文件的格式存储的,不依赖于其他数据库,也就是说,只要把这个db目录备份起来,网站也就备份好了。但是前阵子我在测试合并MT子站点的过程中,发现恢复备份后有些问题,登录时用户名与密码验证会出错——当时无法解决这个问题,就只好将测试进行到底了,幸好合并测试过程中没有出太大的错误,也算是顺利完成合并的任务了。
现在,升级Blog的MT程序的任务也要提上日程了(这个升级的计划前年就提出来了,一直因为合并问题搁置到现在),但是升级之前一定要把这个备份的问题解决好,因为升级并不像合并时自己可以控制的,难免会出现什么问题。
也许是今天运气好,尝试了几次以后终于发现了问题,其实就是一个很简单的小细节被忽视掉了。
新建一个MT网站,将目前站点的中db目录下的内容复制到新站点中: cp -r db/* XXX/db/;发现可以登录,也就是说问题被解决了,继续找原因。
将新站点db目录更名为db_old,新建目录db,并重复上一步的过程,发现无法登录。
还是新建新站点的db目录,用tar cvf & tar xvf来传递数据库,发现仍然无法登录。
无意中比较新旧站点两个目录的时候,发现新站点的db目录没有给web匿名用户写权限。也就是说一直以来的原因在于db目录中的数据库文件(包含db目录自身)如果是新建的,默认并没有给web匿名用户写权限,导致MT程序无法操作数据库。
原因找出来就好办了,解决方法有三个:
cp命令使用-p 参数来保证复制过程中保留原来的权限, 或者
tar命令释放包时使用-p参数来保留原来的权限(从另一个角度来说,tar在创建包的时候有包含文件原先的权限,但是释放包的时候默认是使用新建文件的权限,而不是文件原先的权限,除非带上-p参数),或者
先尽管复制文件过去,事后再用chmod去修改相应的文件权限。
当问题解决以后,忽然有一种似曾相识的感觉,好像这个问题以前是解决过。也许是上次Web服务从Windows平台迁移到Linux平台的时候,碰到这个问题吧,只是自己给忘了。看样子这一阵子脑袋可真是糊涂呀,这次把问题解决了记录一下,希望下次自己忘记的时候能回来找。
忽然间想到,希望不要在blog里看到以前有解决过这个问题的文章,不然就要被笑掉大牙了。
#!/usr/bin/perl -w
BEGIN {
my $MT_DIR = ‘./’;
chdir $MT_DIR;
unshift @INC, $MT_DIR . ‘lib’;
unshift @INC, $MT_DIR . ‘extlib’;
}
use MT;
use MT::Entry;
my $mt = MT->new;
my $entry;
my $entry_id = 1;
while(1) {
$entry = MT::Entry->load($entry_id++) or exit;
if (1 != $entry->blog_id ) {
print “\t”, $entry->id, “\t”, $entry->blog_id, “\t”, $entry->title, “\n”;
$entry->blog_id(1);
$entry->save
or die $entry->errstr;
}
}
通过这个脚本可以将一个MT站点里的各个子Blog合并到第一个Blog(通常是主Blog)。
一直想让blog右边的Comments以摘要的形式来现实,可是一直不会。昨天终于问了出来,就得到答案了,原来是用一个经过Wayne修改过的FirstNwords的插件(取名叫FirstNChars)。今天用这个标记修改了一下模板,现在网页漂亮一些了。嘿嘿。
然后才发现好久没有写出一篇文章来了。
今天仔细地看了一下别人Blog里关于CNBlog的链接,才发现以前一直都把这个和blogcn, blogchina搞混了,还以为以前上的blogcn, blogchina就是CNBlog,呵呵。
从CNBlog那里拿到一个最新Blog的script,于是开始改动Main Index模板,顺便调整了右边链接栏的次序,而且还把每次同时显示文章内容减少了,免得一屏里难得看到几篇文章(主要是向blogs.xmu.edu.cn学的,呵呵),之后又向wayne学把文章title摆在中间(.title->text-align:center),这下清爽多了。
改的过程中有几个问题:
- 所有文章的链接有没有什么模板标记?我现在用的是<$MTBlogURL$>archives.html
- mt系统目录mt-static有没有什么模板标记?我现在是写绝对路径/mt-static/
- MTEntryBody的words属性是什么含义?为什么我设定了5结果还有几十个字跑出来,而现在设定成1了也才看着差不多?
目前index.htmlMain Index模板是用MTGlobalEntries来显示所有blog的文章的。而xml里用的还是MTEntries,这就使得别人用rss feed来看我的index.xml时就不能向看网页一样看到所有的文章了,而且随着我的子blog越来越多,分别索引也就越来越麻烦了。今天突然想起,是不是也可以把index.xml模板RSS 2.0 Index的MTEntries改成MTGlobalEntries,这个就和html统一起来了。
于是在模板里找到<MTEntries lastn=”15″>改成<MTGlobalEntries lastn=”100″>;</MTEntries>改成</MTGlobalEntries>
(100??!胃口很大,呵呵)
保存,重建,成功,^_^
同理,把RSS 1.0 Index的index.rdf也一起改了,呵呵。
这个想法来源于以后在扩充blog和调整blog可能产生的需求,还有就是以前有几次误操作导致一个blog的模板被移动到另一个blog。因此进行这个测试看看能不能把文章也进行移动。
1、先选好文章,进入文章编辑模式
2、把地址栏的链接(mt.cgi?__mode=view&_type=entry&blog_id=3&id=78&saved_changes=1)
改成(mt.cgi?__mode=view&_type=entry&blog_id=1&id=78&saved_changes=1)
也就是把blog_id改成目标blog的id,并敲回车使之重定向到新的blog
3、点保存在新的blog里保存这个文章
###到目前为止,文章就在新的blog里了,可是看旧的blog,发现文章还在。是没有移动只进行了复制操作吗?不是的,这只是因为旧的blog还没有进行更新操作。
4、转到就的blog,执行系统更新,这样就基本上完成了移动步骤了。
最后就是可以在新的blog继续修改文章,更改类别等等。