Mediawiki: Получение рабочих мест для редактирования на вики-ферме / семье

Я создал семейство Wiki, состоящее из небольшого количества Wiki, которые имеют (и, как ожидается, будут иметь) трафик от низкого до умеренного.

Когда вы запускаете один MediaWiki, он запускает работу для каждого запроса страницы, что хорошо для поддержания ссылок и категорий в актуальном состоянии, но я не могу заставить это поведение работать для семейства вики.

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

Есть ли способ исправить / обойти это? При запуске очереди заданий я не нашел никаких переменных, которые могли бы быть переданы в файл localSettings.php, чтобы загружались правильные параметры и задания могли работать правильно.

0

Решение

Обычно задания выполняются при каждой загрузке страницы в контексте текущей вики, это означает, что в вашем случае не должно быть проблем с очередью, поскольку ваш файл LocalSettings разветвлен. Хотя в определенных обстоятельствах очередь заданий может быть перегружена, в этом случае вам нужно будет отключить поведение очереди по умолчанию (путем настройки $wgJobRunRate = 0;) и настройте сценарии обслуживания бегуна в crontab. Это может быть сложно для разветвленной фермы, но я думаю, что это будет работать так:

* * * * * php /path/to/your/wiki/maintenance/runJobs.php --wiki domainA.com
* * * * * php /path/to/your/wiki/maintenance/runJobs.php --wiki domainB.com
* * * * * php /path/to/your/wiki/maintenance/runJobs.php --wiki domainC.com

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

...
$activeWiki = 'defaultWiki';
$switchVar = $_SERVER['SERVER_NAME'];
if( defined('DO_MAINTENANCE') && defined('MW_DB') ) {
$switchVar = MW_DB;
}
switch( $switchVar ) {
...
}
...
0

Другие решения

Обнаружена проблема — проблема заключалась в том, что вики находились за воротами прав доступа (просто обычными Apache), и асинхронные задания не наследуют разрешения, поэтому для решения этой проблемы пришлось установить для асинхронных заданий значение false.

В случае, если кто-то еще получит эту проблему — $ wgRunJobsAsync = false; должен быть добавлен в localSettings.php

0

По вопросам рекламы [email protected]