I just upgraded to 4.2.1 and am having a few odd errors. To upgrade, I unpacked 4.21 into a clean directory, installed my plugins and then switched my live symlink from my old install to the new one. The upgrade seemed to go fine, and mt-check claims everything's great. Here's what I'm seeing:
- A constant stream of errors from TypePad antispam. Every new comment results in the following:
Junk Filter TypePad AntiSpam died with: Undefined subroutine &URI::Escape::escapechar called at /path/to/install/MTOS-4.21 -en/extlib/URI/query.pm line 50.
- Frequent 500 errors during normal processing. The intended action (say, marking comments as spam) typically gets completed successfully, but not always.
There's nothing interesting in my Apache error logs - an occasional 'premature end of script headers' in mt.cgi with no further info. I've double checked all of my filesystem permissions (I'm on Linux at Dreamhost if is matters). Help!
Reported on Movable Type 4.2

I don't want to come off as passing the buck here, but I used to use Dreamhost and found them to be a pretty unreliable host; I had a lot of database and general performance problems when I hosted my blog there, and those issues can cause 500 errors. If you are seeing 500 errors on operations that take longer than a few dozen seconds, chances are it is Apache losing patience with your script and killing it via a CGI timeout.
What happens when you install a fresh copy of Movable Type, don't use symlinks, etc.?
Hmm. It's possible, of course, especially the 500 errors (DreamHost can be quite aggressive about terminating processes that take up more that their fair share of CPU). That wouldn't explain the TypePad AntiSpam errors, however.
My install was a clean one - I didn't create a fresh db, but I haven't modified my schema or done anything to my working db outside of Movable Type itself. I could live with the 500 errors and the rest if I was able to get rid of the hundreds of spam comments I'm getting a week.
I get the same thing (the _query.pm error not 500s)and my host is pretty decent, Livingdot.
After being moved to a new host @ Dreamhost, the 500 errors have gone away, suggesting the host I was on was overloaded. However, my _query.pm problems remain. Typepad Antispam errors out on every single spam message it processes, resulting in virtually every spam comment passing through undetected. In case it helps, my host is running 64-bit Linux kernel 2.6.24.6, perl v5.8.8 built for x86_64-linux-gnu-thread-multi and Apache 2.2.9 with PHP 4.4.7.
It seems I posted my last follow-up to this forum's doppelganger - why are there two forums, one with 'new-design' in the URL?
At any rate, copied from the other forum:
I've done some more research into this. Forgive me, but I'm not a Perl guru so I'm not sure if any of this is helpful or not.
Looking in the extlib directory of my MT install, I see the URI module is version 1.36 (line 5 of extlib/URI.pm) and that the URI::Escape module is version 3.29 (extlib/URI/Escape.pm line 148).
I inserted the following code into _query.pm just above the line that's failing:
open(MYOUTFILE, ">/home/ggoodale/perl.out");
print MYOUTFILE "$URI::VERSION\n";
print MYOUTFILE "$URI::Escape::VERSION\n";
close(MYOUTFILE);
I then submitted a comment. The perl.out file now contains the following lines:
1.36
3.28
I then ran the following on the command line:
> perl -MURI -e 'print "$URI::VERSION\n"'
1.35
> perl -MURI -e 'print "$URI::Escape::VERSION\n"'
3.28
So it appears MT is picking up the URI module from extlib, but URI is using the URI::Escape module from my hosting provider's default perl install. How can I fix this?
This may be a work around for your problem.
Hi Mike,
Thanks, but no luck. Changing
use URI::Escape qw(uri_unescape);
to
use only URI::Escape qw(uri_unescape) => "3.29";
produced the following error when I attempted to log in to create a new comment and test out the workaround:
syntax error at /path/to/MTOS-4.21-en/extlib/URI/_query.pm line 5, near "URI::Escape qw(uri_unescape)" Compilation failed in require at /path/to/MTOS-4.21-en/extlib/URI/_generic.pm line 3. Compilation failed in require at /path/to/MTOS-4.21-en/extlib/URI/_server.pm line 2. Compilation failed in require at /path/to/MTOS-4.21-en/extlib/URI/http.pm line 3. Compilation failed in require at (eval 75) line 3.
A bit of googling turned up this alternate syntax:
use only URI::Escape => "3.29", qw(uri_unescape);
which produced a different error:
Can't locate object method "_init" via package "URI::_foreign" at /mnt/local/home/ggoodale/fibble.org/MTOS-4.21-en/extlib/URI.pm line 60.
Any idea what's going on?