InstantCommons无法在MediaWiki 1.19和SELinux中运行

时间:2012-08-28 15:10:39

标签: image mediawiki wiki wikimedia-commons

我在本地设置自己的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 个答案:

答案 0 :(得分:1)

好的,这不是(还)一个答案,而是一个调试建议。在我看来,从服务器到Commons的HTTP请求由于某种原因失败了,但不幸的是,ForeignAPIRepo没有以任何方式指出错误的原因。

这实际上是MediaWiki中的一个错误,应该修复,但与此同时,您可以尝试应用以下差异(或者只是手动添加标有+符号的行)到您的{ {1}}档案:

includes/filerepo/ForeignAPIRepo.php

应用它之后,尝试加载Commons图像的文件描述页面并查看MediaWiki调试日志。现在应该有一行以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; } } 开头,然后是几行XML错误转储。该错误数据应该有希望表明出了什么问题;请复制并粘贴在这里。

答案 1 :(得分:0)

我也不是一个明确的答案。参考Ilmari Karonen's post,我无法找到或获取我的Mediawiki v1.23.0版本的getXML()方法。我正在查看参考文档found here以尝试在Status类上找到任何其他方法调用,这些方法将为我提供良好的故障排除信息。我最终找到了以下内容并编辑了与Ilmari Karonen's post 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;
}

答案 2 :(得分:0)

较旧的MediaWikis的默认InstantCommons配置有点傻。由于T114098我推荐以下其中一项,这有望解决您的问题:

  1. 升级到MediaWiki 1.27(发布时)或
  2. 将您的LocalSettings.php设置为热链接图像,以节省服务器端请求和处理。
  3. $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, );