2008-02-01

Сутки пытался развернуть TWiki на мастерхосте, но так и не смог.

При обращении к bin/view/TWiki/WebHome сервер упорно выдает ошибку HTTP 502/ Bad Gateway. При этом заголовки выглядят очень забавно: если вывод успешен, я вижу:

HTTP/1.1 200 OK
Date: Thu, 31 Jan 2008 12:55:38 GMT
Content-Type: text/html; charset=ISO-8859-1
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: max-age=0
Expires: Thu, 31 Jan 2008 12:55:36 GMT

А в случае ошибки -

HTTP/1.1 502 Bad Gateway
Server: nginx/0.5.18
Date: Thu, 31 Jan 2008 12:54:32 GMT
Content-Type: text/html
Content-Length: 0
Connection: keep-alive
Keep-Alive: timeout=5


Особенно интересна строка заголовка Server... Погуглив, нашел, что это мегасервер ngnix, и видимо через него балансируется нагрузка на виртуальный хостинг на машине (там FreeBSD 6).

Я повторил запрос уже с консоли хостинга (lynx - незаменимый текстовый браузер! памятка: не забыть поставить памятник разработчикам и пристрелить тех, кто утверждал, что текстовый браузер - это глупость), и снова полюбовался на 502/Bad Gateway.

Сослаться на собственную тупость не могу: развернуть TWiki на домашней машине под Debian 4.0 заняло ровно 7 минут.

Написал в поддержку... Первым ответом у меня тактично поинтересовались, смотрел ли я error_log и где находится скрипт. Я пояснил, а дальше в ответ - тишина.

И только я собрался звонить и голосом озвучивать свою проблему (ибо прошло более 4 суток с момента моего второго письма), я, чтобы не выглядеть идиотом, решил на всякий случай проверить, существует ли глюк до сих пор. Оказалось - уже поправили! А на следующий день пришел ответ, такого содержания:

Приносим извинения за задержку с ответом.

Исправления должны быть таковы:
--- lib/TWiki.pm.orig Tue Feb 5 20:36:07 2008
+++ lib/TWiki.pm Tue Feb 5 20:49:33 2008
@@ -603,7 +603,7 @@
# - too 5.8 dependent
# my $len = do { use bytes; length( $text ); };
my $len = length($text);
- $hdr =~ s/\n$/Content-Length: $len\n\n/s if $len;
+ $hdr =~ s/^(.*?)$/Content-Length: $len\n$1/s if $len;
} else {
$hdr = '';
}


В принципе, круто. Дело в том, что я смотрел на \n\n перед строкой Content-Length, но... это работало под Debian и я подумал, что так и надо. А зря... \n\n отделяет заголовки от контента, и я это великолепно знал...

Короче, засчитываем 1 балл в пользу техподдержки Мастерхост.

Комментариев нет: