Mediawiki: база данных должна быть нулевой или непустой строкой - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь настроить Mediawiki с помощью Visual Editor, Parsoid и RESTBase.

Мне удалось настроить вики только с Visual Editor и Parsoid, но когда я пытаюсь заставить работать RESTBase, я получаюмного проблем.

Иногда я могу просмотреть вики, иногда я получаю HTTP ERROR 500.Когда я получаю ошибку 500, я вижу это в журнале apache2:

PHP Fatal error:  Uncaught InvalidArgumentException: Database must be null or a non-empty string. in /var/www/html/includes/libs/rdbms/database/DatabaseDomain.php:46
Stack trace:
#0 /var/www/html/includes/db/MWLBFactory.php(55): Wikimedia\\Rdbms\\DatabaseDomain->__construct(false, NULL, 'mw_')
#1 /var/www/html/includes/ServiceWiring.php(60): MWLBFactory::applyDefaultConfig(Array, Object(GlobalVarConfig), Object(ConfiguredReadOnlyMode))
#2 [internal function]: MediaWiki\\Services\\ServiceContainer->{closure}(Object(MediaWiki\\MediaWikiServices))
#3 /var/www/html/includes/services/ServiceContainer.php(360): call_user_func_array(Object(Closure), Array)
#4 /var/www/html/includes/services/ServiceContainer.php(344): MediaWiki\\Services\\ServiceContainer->createService('DBLoadBalancerF...')
#5 /var/www/html/includes/MediaWikiServices.php(513): MediaWiki\\Services\\ServiceContainer->getService('DBLoadBalancerF...')
#6 /var/www/html/includes/exception/MWExceptionHandler.php(100): MediaWiki\\MediaWikiServices->getDBLoadBalancerFactory()
#7 /var/w in /var/www/html/includes/libs/rdbms/database/DatabaseDomain.php on line 46

Когда я не получаю 500 ошибок, и могу использовать сайт как положено.Но когда я пытаюсь отредактировать страницу с помощью Visual Editor и сохранить, я получаю HTTP 404 apierror-visualeditor-docserver-http

Edit: См. Мой код на https://github.com/magol/sag-wiki/tree/master/sag-wiki

Настройки для виртуального редактора

$wgVirtualRestConfig['modules']['parsoid'] = array(
    'url'                   => getenv( 'MEDIAWIKI_PARSOID_URL' ),
    'domain'                => 'localhost',
    'prefix'                => 'localhost'
);

$wgVirtualRestConfig['modules']['restbase'] = array(
    'url' => getenv( 'MEDIAWIKI_SERVER' ).'/api/rest_v1',
    'domain' => 'localhost', # matches the "domain" used above
    'forwardCookies' => true,
    'parsoidCompat' => false
);
$wgVisualEditorRestbaseURL     = getenv( 'MEDIAWIKI_SERVER' ).'/api/rest_v1/page/html/';
$wgVisualEditorFullRestbaseURL = getenv( 'MEDIAWIKI_SERVER' ).'/api/rest_';

Настройки для RESTbase

services:
  - name: restbase
    module: hyperswitch
    conf:
      port: {env(RESTBASE_PORT,7231)}
      salt: secret
      default_page_size: 125
      user_agent: RESTBase
      ui_name: RESTBase
      ui_url: https://www.mediawiki.org/wiki/RESTBase
      ui_title: RESTBase docs
      spec:
        x-request-filters:
          - path: lib/security_response_header_filter.js
          - path: lib/normalize_headers_filter.js
        x-sub-request-filters:
          - type: default
            name: http
            options:
              allow:
                - pattern: '{env(MEDIAWIKI_API_URL,http://localhost/w/api.php)}'
                  forward_headers: true
                - pattern: http://localhost:8142
                  forward_headers: true
                - pattern: /^https?:\/\//
        paths:
          /{domain:localhost}:
            x-modules:
              - path: projects/example.yaml
                options:
                  action:
                    # XXX Check API URL!
                    apiUriTemplate: '{env(MEDIAWIKI_API_URL,http://localhost/w/api.php)}'
                    # XXX Check the base RESTBase URI
                    baseUriTemplate: "{{'http://{domain}:7231/{domain}/v1'}}"
                  parsoid:
                    # XXX Check Parsoid URL!
                    host: '{env(PARSOID_HOST_PORT,http://localhost:8142)}'
                  table:
                    backend: sqlite
                    dbname: /data/restbase_tables.sqlite3
                    pool_idle_timeout: 20000
                    retry_delay: 250
                    retry_limit: 10
                    show_sql: false
                  mathoid:
                    host: '{env(MATHOID_HOST_PORT,http://localhost:10044)}'
                  mobileapps:
                    host: '{env(MOBILEAPPS_URI,https://appservice.wmflabs.org)}'
                  citoid:
                    host: '{env(CITOID_URI,http://localhost:1970)}'
                  purged_cache_control: s-maxage=0, max-age=86400
                  purged_cache_control_client_cache: s-maxage=0, max-age=300

# Finally, a standard service-runner config.
info:
  name: restbase

logging:
  name: restbase
  level: '{env(RESTBASE_LOGGING_LEVEL,info)}'

num_workers: 1

Настройки для Parsoid

num_workers: '0'
worker_heartbeat_timeout: 300000
logging:
    level: info
services:
  - module: lib/index.js
    entrypoint: apiServiceWorker
    conf:
        serverPort: 8142
        mwApis:
          -
            uri: 'http://web/w/api.php'
            domain: 'localhost'
...