InstantCommons не работает в MediaWiki 1.19 и SELinux
Я настраиваю свой собственный веб-сайт MediaWiki локально и не могу заставить работать функцию InstantCommons (используется для непосредственного встраивания файлов из commons.wikimedia.org).
Я не получаю сообщение об ошибке, файлы, которые я пытаюсь загрузить из Commons, используя следующий синтаксис:
[[File:Cervus elaphus Luc Viatour 1.jpg|Cervus elaphus Luc Viatour 1]]
просто не загружаются, и я получаю красную ссылку на моей странице, ссылающуюся на несуществующий файл. Уже 2 дня я ищу решение, но пока безуспешно.
Я бегу:
- MediaWiki v.1.19.1
- Fedora 16 (с SElinux)
- PHP 5.3.15
- MySQL Ver 14.14 Distrib 5.5.25a, для Linux (x86_64)
Я попробовал следующие две конфигурации в моем LocalSettings.php
, безуспешно:
$wgUseInstantCommons = true;
А ТАКЖЕ
$wgForeignFileRepos[] = array(
'class' => 'ForeignAPIRepo',
'name' => 'shared',
'apibase' => 'http://commons.wikimedia.org/w/api.php',
'fetchDescription' => true, // Optional
'descriptionCacheExpiry' => 43200, // 12 hours, optional (values are seconds)
'apiThumbCacheExpiry' => 43200, // 12 hours, optional, but required for local thumb caching
);
Любое предложение приветствуется.
3 ответа
Хорошо, это не (пока) ответ, а предложение отладки. Мне кажется, что HTTP-запрос от вашего сервера к Commons по какой-то причине дает сбой, но, к сожалению, ForeignAPIRepo никоим образом не указывает причину ошибки.
Это действительно ошибка в MediaWiki, и она должна быть исправлена, но пока вы можете попробовать применить следующую разницу (или просто вручную добавить строку, помеченную +
подписать) к вашему includes/filerepo/ForeignAPIRepo.php
файл:
Index: includes/filerepo/ForeignAPIRepo.php
===================================================================
--- includes/filerepo/ForeignAPIRepo.php (revision 97048)
+++ includes/filerepo/ForeignAPIRepo.php (working copy)
@@ -385,6 +385,7 @@
if ( $status->isOK() ) {
return $req->getContent();
} else {
+ wfDebug( "ForeignAPIRepo: HTTP GET failed: " . $status->getXML() );
return false;
}
}
После его применения попробуйте загрузить страницу описания файла для изображения Commons и посмотрите журнал отладки MediaWiki. Теперь должна быть строка, начинающаяся с ForeignAPIRepo: HTTP GET failed:
сопровождаемый несколькими строками дампа ошибки XML. Эти данные об ошибках, мы надеемся, должны указывать, что происходит не так; пожалуйста, скопируйте и вставьте его здесь.
Конфигурация InstantCommons по умолчанию для старых MediaWikis немного глупа. Из-за T114098 я рекомендую одно из следующего, которое, мы надеемся, исправит ваши проблемы:
- обновить до MediaWiki 1.27 (когда он выйдет), или
- установить свой
LocalSettings.php
для горячих ссылок изображений, чтобы сохранить на стороне сервера запросов и обработки.
$wgUseInstantCommons = false;
$wgForeignFileRepos[] = array(
'class' => 'ForeignAPIRepo',
'name' => 'commonshotlink',
'apibase' => 'https://commons.wikimedia.org/w/api.php',
'hashLevels' => 2,
'url' => 'https://upload.wikimedia.org/wikipedia/commons',
'thumbUrl' => 'https://upload.wikimedia.org/wikipedia/commons/thumb',
'transformVia404' => true,
'fetchDescription' => true,
'descriptionCacheExpiry' => 43200,
'apiThumbCacheExpiry' => 24 * 3600,
);
Мой тоже не является окончательным ответом. Ссылаясь на пост Ильмари Каронена, я не смог найти или получить getXML()
метод для выполнения для моей версии Mediawiki v1.23.0. Я искал справочную документацию, найденную здесь, чтобы попытаться найти другие вызовы методов на Status
класс, который даст мне хорошую информацию для устранения неполадок. В итоге я нашел следующее и отредактировал тот же файл, который упоминался в посте Ильмари Каронена.includes/filerepo/ForeignAPIRepo.php
начиная со строки № 521:
if ( $status->isOK() ) {
return $req->getContent();
} else {
$error = $status->getErrorsArray();
$dump = print_r($error, true);
wfDebug("ForeignAPIRepo: HTTP GET failed: $dump\n");
return false;
}