Site icon David Yin's Blog

MovableType 3.2 on Windows 2003

MovableType 3.2 has five beta versions, I tested some on my windows 2000 windows XP machines. They all fine.
When Six Apart release the final version 3.2, I installed it immediately on my Windows 2000. It run smoothly on it. Tests included brand new install and upgrade from Movable Type 3.17.
On August 26, 2005, I upload all files into my Windows Server 2003. Modified setting fies according to the Docs. It failed.
Gave me the following errors:

CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.

After 4 days research and a lot of tests and some modifications for the native Movable Type 3.2 files. I got the solution.


This problem is only happened on Windows server 2003, webserver is IIS 6.0, ActivePerl environment. That is my server’s settings.
Ok, if you met the same problem in the similar machine, do the following steps.
Fisrt of all, according to the guide of Installing Movable Type on Windows
, install everything.
Here is the zip file you need to remove the errors.
mt32patch2k3.zip Download file
Download it and unzip it, save them into your mt root folder, confirm to replace the origrinal files.
After that, the MovableType 3.2 can work on the Windows 2003 Server.
Following tests are passed: Installation, Upgrade, Add Category, Upload files, Create Folder, Comments, Trackback, Search, Autofind Trackback, Add Notification, Make Image Thumbnail.
I also want to explain the modifications and try to explain the bugs.
Before Movable Type 3.2 Beta3, the MT system use the following scripts to add directory.

my($MT_DIR);
BEGIN {
if ($0 =~ m!(.*[/\\])!) {
$MT_DIR = $1;
} else {
$MT_DIR = './';
}
unshift @INC, $MT_DIR . 'lib';
unshift @INC, $MT_DIR . 'extlib';
}

When the Movable Type 3.2 Beta3 release, they changed it to:

>use lib 'lib';

This one works on all windows box except Windows 2003, see the error reported on their beta 3 post first reported by Iain Stewart on August 7, 2005. Until the final release, this error still happen on the Windows 2003 server.
They use the simply script to replace the long one. I checked the ActivePerl 5.8.7 build 813 Documentation. Under Pragmas — Lib section, a good detailed sentence tell the truth:

Adding directories to @INC
The parameters to use lib are added to the start of the perl search path. Saying
use lib LIST;
is <em>almost</em> the same as saying
BEGIN { unshift(@INC, LIST) }

Look, the “almost” is italic on the original documentation. That means it must contain some differences. I used all my fingers to search the difference. I am not a Perl programer. I got nothing to explain the difference, but I trust the difference happened on the Windows 2003.
Finally, I use the script from the mt-check.cgi file shipped with Movable Type 3.2 which works without modification.

BEGIN {
my $dir;
require File::Spec;
if (!($dir = $ENV{MT_HOME})) {
if ($0 =~ m!(.*[/\\])!) {
$dir = $1;
} else {
$dir = './';
}
$ENV{MT_HOME} = $dir;
}
unshift @INC, File::Spec-&gt;catdir($dir, 'lib');
unshift @INC, File::Spec-&gt;catdir($dir, 'extlib');
}

to replace the script in the files:

use lib 'lib';

Any experts of Perl language can tell the difference will be very appreciated.
This patch file is made by myself and not authorized by Six Apart. I do not want to break the license. I send it out to help the others with same troubles.
You still can edit the code yourself, just following the above guide.

Exit mobile version