简体   繁体   中英

MediaWiki 1.35 parsoid timeout trying use VisualEditor

I've installed mediawiki on an Amazon ec2 server.
The server has only apache, php, mariadb and mediawiki

I'm using mediawiki 1.35, with the bundled VisualEditor and ParsoidPHP
I can use VisualEditor to edit a new page, but it will not save, and when I edit an existing page, I get the blue progress bar followed by the error:
Error contacting the Parsoid/RESTBase server: (curl error: 28) Timeout was reached
I've tried configuring parsoid using instruction I've found on the web :

$wgVirtualRestConfig['modules']['parsoid'] = [
        // URL to the Parsoid instance - use port 8142 if you use the Debian package - the parameter 'URL' was first used but is now deprecated (string)
        'url' => 'http://myIpAddress:8000',
        // Parsoid "domain" (string, optional) - MediaWiki >= 1.26
        'domain' => 'myIpAddress',
        // Parsoid "prefix" (string, optional) - deprecated since MediaWiki 1.26, use 'domain'
        'prefix' => 'myIpAddress',
        // Forward cookies in the case of private wikis (string or false, optional)
        'forwardCookies' => true,
        // request timeout in seconds (integer or null, optional)
        'timeout' => null,
        // Parsoid HTTP proxy (string or null, optional)
        'HTTPProxy' => null,
        // whether to parse URL as if they were meant for RESTBase (boolean or null, optional)
        'restbaseCompat' => null,
];

The best effect I get is a 404, or a 400. This configuration is not working.
I haven't made any other changes to the settings.

if I call parsoid directly:
http://MyIpAddress/api.php?action=visualeditor&paction=parse&page=Main_Page

I see the timeout thusly:

{
    "error": {
        "code": "apierror-visualeditor-docserver-http-error",
        "info": "Error contacting the Parsoid/RESTBase server: (curl error: 28) Timeout was reached",
        "*": "See http://MyIpAddress/api.php for API usage. Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce> for notice of API deprecations and breaking changes."
    }
}

Based on my testing, it appears that parsoid is using the $wgServer variable to make a local connection to rest.php
Using curl, I'm able to connect to http:// localhost /rest.php/v1/page/Main_Page
But, not to http:// myipaddress /rest.php/v1/page/Main_Page or http:// mydomainname /rest.php/v1/page/Main_Page both of these timeout. The apache server can't connect to itself
So, theoretically, I should be able to set

$wgVirtualRestConfig['modules']['parsoid']['domain']='localhost';

But that results in a 404, instead of a timeout.

In the end, I added my domain name to /etc/hosts and pointed it to 127.0.0.1 and that works fine. It feels like a hack, and I must use a domain name, not just an iP.

We've run into this problem several times.

In one case, it was a matter of access control.

Parsoid makes HTTP requests to the MediaWiki site. We're restricting access to certain actions using the Lockdown extension , and we had to exempt Parsoid, which can be done in several ways, eg:

if (($_SERVER['REMOTE_ADDR'] !== '127.0.0.1') && ($_SERVER['REMOTE_ADDR'] !== $_
SERVER['SERVER_ADDR'])) {
# don't lock down any pages for Parsoid, or the VisualEditor will break on them
    wfLoadExtension('Lockdown');
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM