Архив метки: mediawiki

Расширение HyperComments для MediaWiki

Поскольку очевидный спрос есть, да и хочется внести какой-то вклад в проект, выложил расширение HyperComments на mediawiki.org. Добавляет блок комментариев внизу каждой статьи, кроме главной страницы. Все необходимые пояснения там есть. Успешно используется на Рулусе.

Вообще, мне HyperComments сейчас представляется наиболее адекватной из всех систем комментирования. Пожалуй, тут надо Disqus выкинуть и тоже поставить HyperComments.

MediaWiki: решение проблем с производительностью

Каждый, кто устанавливал MediaWiki, замечал, как медленно она работает. Буквально при любом действии вы сталкиваетесь с невыносимыми тормозами (конечно, если сервер не космически быстрый).

В поисках решения этой проблемы вы придете, например, сюда - How to make MediaWiki fast. Ну, или вот общая категория: Performance tuning. Там собраны вполне разумные советы. Однако важно понять вот что: большинство из них дает лишь микроскопический прирост скорости и не решает проблему тормозов кардинально.

В этот момент нужно сесть, успокоиться, глубоко вздохнуть и принять следующую мысль: без кэширующего реверсивного прокси, который кэшировал бы страницы для незалогиненных пользователей (таких всегда подавляющее большинство) ничего не получится.

Mediawiki.org предлагает использовать Squid, но мне с ним никак не хотелось связываться — во-первых, опыт эксплуатации оставил не очень приятные воспоминания, а во-вторых, на промышленном сервере уже стоял Nginx, который отдавал статику по классической схеме в связке с httpd.

Скажем так: здесь могут быть трудности, но настроить можно. Мне это удалось (не исключаю, правда, что придется еще понаблюдать и что-то допилить). Nginx — очень мощный прокси, и когда вы видите, насколько мгновенно он отдает контент, это, конечно, производит впечатление. Главное — подумать, как различать залогиненных и незалогиненных пользователей. Можно найти пример конфига, где проверяется, содержится ли в куке «UserID» — для этого задействуется модуль ngx_lua, я же решил обойтись без него. И второй важный момент — как принудительно удалять страницу из кэша после ее редактирования. Здесь несколько сложнее: для выполнения запроса PURGE, который выдает MediaWiki, потребуется сторонний модуль ngx_cache_purge.

Основы: NGINX Content Caching.

Рулус и Вики

Когда мне нужно было выбрать вики-движок для Рулуса, MediaWiki была исключена из возможных вариантов за избыточный функционал (и, возможно, за свою внешность).

Тогда я остановился на WikkaWiki. Это довольно неплохой легкий движок, но по ходу дела я с ним намучился. В основном это было связано либо с локализацией, либо с тем, как она обращается с UTF-8.

Локализация была сделана самостоятельно, хотя в процессе обнаружилось, что некоторые сообщения прописаны прямо в коде. О да, этой болезнью страдают многие. Подумаешь, всего несколько английских слов, люди же поймут. В принципе, можно было все сделать как полагается и даже поделиться локализацией «с сообществом», но второй момент резко уменьшает смысл.

Я уверен, что WikkaWiki отлично работает с однобайтовыми кодировками. Но с русским языком выявилось сразу несколько проблемных мест — думаю, реально их намного больше, и штопать все это совсем не хотелось. Если бы меня спросили, что самое главное я мог бы пожелать программистам, которые кроме английского языка других не видели, так это «думайте иногда, что будет, если здесь появится строка в многобайтовой кодировке».

Вот так и получается, что эти вики-движки, однажды буйно разросшиеся, постепенно забываются и пылятся на своих сайтах.

Рулус был перенесен на MediaWiki (последняя стабильная версия на этот момент — 1.22) и вчера выпущен на промысел. Конечно, там все более четко. Благодаря тому, что от движка зависит Википедия, они не могут позволить себе явных косяков. Но в целом, как мне показалось, дела в сообществе скорее грустные. Например, на Stack Overflow человек что-то спрашивает, и ему говорят: «А почему вы не спросите на странице обсуждения где-то на mediawiki.org?» Он отвечает: «Да я спросил, но там уже несколько месяцев никто не отвечает, поэтому я сюда пришел».

Скажем, к MediaWiki нельзя просто взять и прикрутить вход через OAuth. Есть расширение для Facebook, я взялся за него, но не так-то просто. Последняя версия использует что-то из MediaWiki 1.23, которая сейчас пока в альфе — соответственно, пришлось взять предыдущую. Далее, она использует класс из 1.21, которого уже нет в 1.22 — почему это сохраняется в расширении вплоть до последней версии, я так и не понял. К счастью, реально этот класс не очень-то нужен, так что просто берем его из 1.21 и подсовываем. Была еще проблема с сертификатом, но это уже знакомо и решение есть. В итоге вход через Facebook заработал.

Что касается стилей, выбор небольшой, в основном все очень старое и уродливое. То, что сейчас на Рулусе, было получено допиливанием стиля Vector. Не все гладко с мобильным фронтендом, он почему-то не подгружает дополнительные стили, которые должен подгружать. Вот просто так пишут — в предыдущей версии была ошибка, они не грузились, а в этой должны. Пришлось вшивать это туда довольно грубым способом.

Ну и тому подобное, многие проблемы приходится решать самостоятельно, а спросить вроде бы и не у кого. Можно только порадоваться, что разработка вообще идет и что есть люди, на энтузиазме которых все держится — например, в 1.23 есть уже симпатичный визуальный редактор. В этом году должен выйти релиз.