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 я рекомендую одно из следующего, которое, мы надеемся, исправит ваши проблемы:

  1. обновить до MediaWiki 1.27 (когда он выйдет), или
  2. установить свой 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;
}
Другие вопросы по тегам