MediaWiki, Parsoid and Heroku configuration hints

(MediaWiki 1.31.0)

Login “Remember password” checked by default

Add to LocalSettings.php:

$wgHooks['AuthChangeFormFields'][] = function ($requests, $fieldInfo, &$formDescriptor, $action) {
    $formDescriptor['rememberMe']['default'] = true;
    return true;
};

See Hooks/AuthChangeFormFields and HTMLForm.

However, if you need it because of random session drops then see the next chapter:

Session handling / PHP’s default session handler / Session problems

$wgSessionsInObjectCache vs $wgPHPSessionHandling

The first one (and setting it to false) is deprecated (= no longer has effect).

In case you’re getting randomly logged out or “a loss of session data” errors appear then try to disable mixing session handling of MW and PHP. Add to LocalSettings.php:

$wgPHPSessionHandling = 'disable';

Wake Parsoid on user login if running on Heroku free dynos

Parsoid is a node.js-based service used by MediaWiki’s awesome VisualEditor. Parsoid can be set up on a free Heroku account.

Add to LocalSettings.php:

$wgHooks['UserLoggedIn'][] = function($user) {
    if ($user->isAllowed('edit')) {

        $parsoid_host = 'parsoidonheroku.herokuapp.com';

        $fp = fsockopen('ssl://' . $parsoid_host, 443, $errno, $errstr, 30);
        $out = "GET / HTTP/1.1\r\n";
        $out .= "Host: " . $parsoid_host . "\r\n";
        $out .= "Content-Length: 0"."\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        fclose($fp);
    }
};

After a user with edit permission logs into MediaWiki, sends a GET request to Parsoid Heroku-URL but doesn’t wait for an answer. Shouldn’t affect login time but decreases VisualEditor’s first-load time (otherwise could be ~20+ seconds). Free dynos go to sleep after 30min of inactivity. Currently maximum allowed awake time per 24h is 18h.

Enable local Parsoid to have edit access without hardcoding IP or cookie forwarding

Might be useful, depends on your server config. Add to LocalSettings.php:

if ($_SERVER['REMOTE_ADDR'] == gethostbyname(trim(`hostname`))) {
    $wgGroupPermissions['*']['read'] = true;
    $wgGroupPermissions['*']['edit'] = true;
    $wgGroupPermissions['*']['upload'] = true;
    $wgGroupPermissions['*']['reupload'] = true;
    $wgGroupPermissions['*']['reupload-shared'] = true;
}

Leave a Reply