Jump to content

Talk:Parsoid/2017

Add topic
From mediawiki.org

View developer tasks

Report a new bug in Phabricator

Join the IRC channel

Previous discussion was archived at Talk:Parsoid/Archive on 24 June 2015.

parsoidserver-http-error: (curl error: 7) Couldn't connect to server.

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


I recently upgrade my MediaWiki install to 1.28 and upgraded ViusalEditor and Parsoid in the process. I was able to get it to work with one wiki, but it broke when I added another using the configuration example provided in the Parsoid configuration section.

Hopefully I save some people some time here with what I learn about yaml. In yaml, apparently indentation is critical it being interpreted properly, however tab characters are not allowed. If everything is configured correctly and it is not working, try checking the indentations to make sure they use spaces and not tabs.

The error I received was: parsoidserver-http-error: (curl error: 7) Couldn't connect to server. DustinICW (talk) 20:13, 28 January 2017 (UTC)Reply

The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid listing not only on localhost

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hi, as i understand Parsiod in its standard installation is only accessable from localhost. However, for my setup i tried to allow any host in the network to reach it. Therefore, i modified /etc/mediawiki/parsoid/config.yaml by setting serverInterface: '0.0.0.0'. But this did not have any effect even after a restart of the service. What needs to be done to get it running? I miss any information about it in the documentation. Aschroet (talk) 17:39, 31 January 2017 (UTC)Reply

No, the default is to omit the hostname and accept connections on any address at the specified port.
See https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback
Try using a tool like netcat to confirm that the host you're connecting from can reach the server. Maybe you have iptables (firewall) settings preventing it? Arlolra (talk) 20:49, 31 January 2017 (UTC)Reply
Interestingly, I see the following:
netstat -lntu
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp6       0      0 127.0.0.1:8000         :::*                    LISTEN Aschroet (talk) 08:31, 1 February 2017 (UTC)Reply
Sorry, there war a port 8000 conflict where another process also was listening. Aschroet (talk) 12:22, 1 February 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid installation with Visual Editor / mwoffliner.js: Error loading data from server: 404: parsoidserver-http: HTTP 404

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello,

I am trying to install Parsoid in order to use the https://github.com/kiwix/mwoffliner script for dumping my MediaWiki for offline usage in http://www.kiwix.org/ first. Using the Visual Editor would be also nice later.

The mediawiki is running inside an intranet at http://172.18.200.40/himtwiki/, I have disabled short URLs for now, it is a private wiki.

$wgGroupPermissions['*'    ]['read']            = false;
  • The system is running on openSUSE 13.1 (Bottle) (x86_64).
  • MediaWiki: 1.25
  • Parsoid: 0.6.1 / 2016-11-14
  • NodeJS: v4.2.4
  • I followed the steps from Parsoid/Developer Setup
  • Parsoid resides in /root/parsoid/ for testing now
  • Created config.yaml as following:
        # Configure Parsoid to point to your MediaWiki instances.
        mwApis:
        - # This is the only required parameter,
          # the URL of you MediaWiki API endpoint.
          uri: 'http://172.18.200.40/himtwiki/api.php'
          # The "domain" is used for communication with Visual Editor
          # and RESTBase.  It defaults to the hostname portion of
          # the `uri` property below, but you can manually set it
          # to an arbitrary string.
          domain: 'localhost'  # optional
          prefix: 'localhost'
  • Service is running node bin/server.js
    • Update: Command line output added
{"name":"parsoid","hostname":"server223","pid":793,"level":30,"levelPath":"info/service-runner","msg":"master(793) initializing 4 workers","time":"2017-02-07T13:08:11.107Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":802,"level":30,"levelPath":"info","msg":"loading ...","time":"2017-02-07T13:08:11.858Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":802,"level":30,"levelPath":"info","msg":"ready on :8000","time":"2017-02-07T13:08:11.879Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":807,"level":30,"levelPath":"info","msg":"loading ...","time":"2017-02-07T13:08:12.637Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":807,"level":30,"levelPath":"info","msg":"ready on :8000","time":"2017-02-07T13:08:12.656Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":812,"level":30,"levelPath":"info","msg":"loading ...","time":"2017-02-07T13:08:13.403Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":812,"level":30,"levelPath":"info","msg":"ready on :8000","time":"2017-02-07T13:08:13.422Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":817,"level":30,"levelPath":"info","msg":"loading ...","time":"2017-02-07T13:08:14.171Z","v":0}
{"name":"lib/index.js","hostname":"server223","pid":817,"level":30,"levelPath":"info","msg":"ready on :8000","time":"2017-02-07T13:08:14.189Z","v":0}
{"name":"parsoid","hostname":"server223","pid":793,"level":40,"levelPath":"warn/service-runner","msg":"Startup finished","time":"2017-02-07T13:08:14.190Z","v":0}

Visual Editor

[edit]
  • I have also went through the Visual Editor installation, which is not working, I get the button Edit source for editing only (Visual Editor is actually enabled in the user preferences).
    • Update: $wgVisualEditorNamespaces = array(NS_MAIN, NS_USER); was missing in my LocalSettings.php, now I can try to edit existing pages the Visual Editor, but it fails with Error loading data from server: 404: parsoidserver-http: HTTP 404, now I am looking at other users´ issues with the same error, but nothing has helped so far.

LocalSettings.php:

wfLoadExtension( 'VisualEditor' );

// Enable by default for everybody
// $wgDefaultUserOptions['visualeditor-enable'] = 1;

// Optional: Set VisualEditor as the default for anonymous users
// otherwise they will have to switch to VE
// $wgDefaultUserOptions['visualeditor-editor'] = "visualeditor";

// Don't allow users to disable it
// $wgHiddenPrefs[] = 'visualeditor-enable';

// OPTIONAL: Enable VisualEditor's experimental code features
#$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;

$wgVirtualRestConfig['modules']['parsoid'] = array(
	// URL to the Parsoid instance
	// Use port 8142 if you use the Debian package
	'url' => 'http://localhost:8000',
	// Parsoid "domain", see below (optional)
	'domain' => 'localhost',
	// Parsoid "prefix", see below (optional)
	'prefix' => 'localhost'
);
$wgSessionsInObjectCache = true;

Settings for private wiki from https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis are added:

// This feature requires a non-locking session store. The default session store will not work and
// will cause deadlocks (connection timeouts from Parsoid) when trying to use this feature.
$wgSessionsInObjectCache = true;

// Forward users' Cookie: headers to Parsoid. Required for private wikis (login required to read).
// If the wiki is not private (i.e. $wgGroupPermissions['*']['read'] is true) this configuration
// variable will be ignored.
//
// WARNING: ONLY enable this on private wikis and ONLY IF you understand the SECURITY IMPLICATIONS
// of sending Cookie headers to Parsoid over HTTP. For security reasons, it is strongly recommended
// that $wgVirtualRestConfig['modules']['parsoid']['url'] be pointed to localhost if this setting is enabled.
$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;

Thanks in advance Escalatr (talk) 08:57, 7 February 2017 (UTC)Reply

The _wikitext and _html routes are intended to be private, for development use only. To enable them, add devAPI: true to your config.yaml Arlolra (talk) 16:31, 7 February 2017 (UTC)Reply
Thanks for the remark, devAPI: true indeed enabled _wikitext output! This topic is at least partially solved.
However, Visual Editor and mwoffliner.js still fail with the error Error loading data from server: 404: parsoidserver-http: HTTP 404 Escalatr (talk) 11:52, 8 February 2017 (UTC)Reply
Sounds like Parsoid itself is configured correctly now. Try setting the url in the $wgVirtualRestConfig in your LocalSetting.php to http://172.18.200.40:8000, since that's what you tested above. Arlolra (talk) 18:54, 8 February 2017 (UTC)Reply
Thanks for the reply, I tried several URLs already:
The page http://172.18.200.40:8000/localhost/v3/page/html/Main_Page/ is always working, however Visual Editor fails. The only difference with http://localhost:8000 and http://127.0.0.1:8000: the parsed page seems to be missing CSS files (I am seeing the default browser font and formatting).
I am quite unclear how domain and prefix should be configured, the documentation is rather contradictory, have tried several settings already.
I have started a thread with some more information at Visual Editor discussion: https://www.mediawiki.org/wiki/Extension%20talk%3AVisualEditor/2017/02#h-Logs-2017-02-08T13%3A40%3A00.000Z. Parsoid seems to work properly in general. Just the connection by VisualEditor and mwoffliner.js fails. Escalatr (talk) 07:59, 9 February 2017 (UTC)Reply
According to https://www.mediawiki.org/wiki/Offline_content_generator/Installation/en#Starting I called netstat -tuln, the output:
server223:/etc/init.d # netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:9200            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:9300            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6556            0.0.0.0:*               LISTEN
tcp        0      0 :::8000                 :::*                    LISTEN
tcp        0      0 :::873                  :::*                    LISTEN
tcp        0      0 :::3306                 :::*                    LISTEN
tcp        0      0 :::22                   :::*                    LISTEN
udp        0      0 0.0.0.0:57053           0.0.0.0:*
udp        0      0 0.0.0.0:57231           0.0.0.0:*
udp        0      0 0.0.0.0:33014           0.0.0.0:*
udp        0      0 0.0.0.0:54328           0.0.0.0:*
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp        0      0 0.0.0.0:43376           0.0.0.0:*
udp        0      0 0.0.0.0:47603           0.0.0.0:*
udp        0      0 :::38093                :::*
udp        0      0 :::5353                 :::*
The colons indicate that it's listening on IPv6 addresses as well. That seems ok since you were able to reach the IPv4 address 172.18.200.40
No, Redis is not required in any way. Arlolra (talk) 20:22, 11 February 2017 (UTC)Reply
Thanks for the clarification. Escalatr (talk) 08:01, 13 February 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Can't find settings.js under /etc/mediawiki/parsoid in Debian

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


So I got Parsoid installed throguh apt-get install parsoid under Debian.

Then there is only a config.yaml under /etc/mediawiki/parsoid

Is this means I only need to config the config.yaml file for VisualEditor? Deletedaccount4567435 (talk) 23:27, 8 February 2017 (UTC)Reply

Yes, in Parsoid v0.6.x, config.yaml is all you need. Arlolra (talk) 23:30, 8 February 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid Returns Invalid Domain

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello,

I am running an internal company wiki that allows read to anyone, but only write to users. I upgraded my MediaWiki instance from 1.24 to 1.28. Parsoid and VisualEditor used to work. After updating I saw that Parsoid didn't work anymore so I upgraded the Parsoid service from 0.1.8 to 0.6.1. Visual Editor still does nothing when I click on the edit link. The version of nodejs is 0.10.37

Going to http://mydomain:8142/ takes me to the welcome page for Parsoid. When I got to http://mydomain:8142/localhost/v3/page/html/Main_Page/ it says:

 Invalid domain: localhost

Doing curl -L http://localhost/api.php returns the api's page.

The parsoid.log file looks like this:

{
	"type": "log",
	"name": "parsoid",
	"hostname": "mydomain",
	"pid": 2643,
	"level": 60,
	"err": {
		"message": "Invalid domain: localhost",
		"name": "../src/lib/index.js",
		"stack": "../src/lib/index.js: Invalid domain: localhost\n    at errOut (/usr/lib/parsoid/src/lib/api/routes.js:30:13)\n    at routes.v3Middle (/usr/lib/parsoid/src/lib/api/routes.js:94:11)\n    at Layer.handle [as handle_request] (/usr/lib/parsoid/node_modules/express/lib/router/layer.js:95:5)\n    at next (/usr/lib/parsoid/node_modules/express/lib/router/route.js:131:13)\n    at Route.dispatch (/usr/lib/parsoid/node_modules/express/lib/router/route.js:112:3)\n    at Layer.handle [as handle_request] (/usr/lib/parsoid/node_modules/express/lib/router/layer.js:95:5)\n    at /usr/lib/parsoid/node_modules/express/lib/router/index.js:277:22\n    at param (/usr/lib/parsoid/node_modules/express/lib/router/index.js:349:14)\n    at param (/usr/lib/parsoid/node_modules/express/lib/router/index.js:365:14)\n    at param (/usr/lib/parsoid/node_modules/express/lib/router/index.js:365:14)\n    at param (/usr/lib/parsoid/node_modules/express/lib/router/index.js:365:14)\n    at param (/usr/lib/parsoid/node_modules/express/lib/router/index.js:365:14)\n    at Function.process_params (/usr/lib/parsoid/node_modules/express/lib/router/index.js:410:3)\n    at next (/usr/lib/parsoid/node_modules/express/lib/router/index.js:271:10)\n    at /usr/lib/parsoid/src/lib/api/ParsoidService.js:159:3\n    at Layer.handle [as handle_request] (/usr/lib/parsoid/node_modules/express/lib/router/layer.js:95:5)",
		"httpStatus": 404,
		"suppressLoggingStack": true,
		"levelPath": "fatal/request"
	},
	"msg": "Invalid domain: localhost",
	"time": "2017-03-09T13:28:39.611Z",
	"v": 0
}

Here is my pastebin for my config.yaml http://pastebin.com/T8CLbx5p

Here is the section of my LocalSettings.php where I setup Visual Editor

#visual editing
wfLoadExtension( 'Parsoid' );
wfLoadExtension( 'VisualEditor' );
#require_once("$IP/extensions/VisualEditor/VisualEditor.php");
$wgVirtualRestConfig['modules']['parsoid'] = array(
	// URL to the Parsoid instance
	// Use port 8142 if you use the Debian package
	'url' => 'http://localhost:8142',
	// Parsoid "domain", see below (optional)
	'domain' => 'localhost',
	// Parsoid "prefix", see below (optional)
	'prefix' => 'localhost'
);

// This feature requires a non-locking session store. The default session store will not work and
// will cause deadlocks (connection timeouts from Parsoid) when trying to use this feature.
$wgSessionsInObjectCache = true;

// Forward users' Cookie: headers to Parsoid. Required for private wikis (login required to read).
// If the wiki is not private (i.e. $wgGroupPermissions['*']['read'] is true) this configuration
// variable will be ignored.
//
// WARNING: ONLY enable this on private wikis and ONLY IF you understand the SECURITY IMPLICATIONS
// of sending Cookie headers to Parsoid over HTTP. For security reasons, it is strongly recommended
// that $wgVirtualRestConfig['modules']['parsoid']['url'] be pointed to localhost if this setting is enabled.
$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;

// URL to the Parsoid instance
// MUST NOT end in a slash due to Parsoid bug
// Use port 8142 if you use the Debian package
#$wgVisualEditorParsoidURL = 'http://localhost:8142';

// Namespaces to enable VisualEditor in
#$wgVisualEditorNamespaces = array_merge( $wgContentNamespaces, array( NS_USER, NS_HELP, NS_TEMPLATE, NS_CATEGORY ) );

//Default user options

// Enable by default for everybody
$wgDefaultUserOptions['visualeditor-enable'] = 1;

Any suggestions of anything else to try? Thank you very much for the help. Sorvis (talk) 13:44, 9 March 2017 (UTC)Reply

The config.yaml looks ok. Based on the error though, it looks like it isn't actually loading that file. How did you install Parsoid? Did you restart Parsoid after editing the config? Try and confirm that it is indeed using that file, maybe by introducing some broken syntax there and looking for a new error. Arlolra (talk) 16:23, 9 March 2017 (UTC)Reply
Thank you for the suggestion Arioira. I put a garbage line in the config then restarted the service then I saw it place an error in the log file so I think it did at least try to parse the config file.
Parsoid was installed from the wikimedia package repository. This is the package it was installed from: https://releases.wikimedia.org/debian/pool/main/p/parsoid/parsoid_0.6.1all_all.deb Sorvis (talk) 17:46, 9 March 2017 (UTC)Reply
On second looks, I noticed you have this in the config file,
#- # This is the only required parameter,
that should be,
- # This is the only required parameter, Arlolra (talk) 22:23, 9 March 2017 (UTC)Reply
Good news that makes http://mydomain:8142/localhost/v3/page/html/Main_Page/ return data now!!!! Thank you very much. :-)
OK, problem number 2. Visual Editor just redirects to http://mydomain/index.php?title=Main_Page&veaction=edit when I click edit. It does not look like any new Parsoid logs are being created when this redirect happens. I checked out the wikimedia debug log and didn't see any errors in it. When I googled my problem most people seem to say they forgot to run the submodule update command on the VisualEditor repository, but I already ran that in this case.
Are there any other steps I could take to troubleshoot the problem? Sorvis (talk) 13:49, 10 March 2017 (UTC)Reply
Hmm, did you check for any errors in the your browser's development console? Otherwise, maybe temporarily disable any other extensions you have installed to see if that's preventing it from loading.
Lastly, you might get a better answer at https://www.mediawiki.org/wiki/Talk:VisualEditor Arlolra (talk) 16:47, 10 March 2017 (UTC)Reply
OK I'll give those suggestions are try. Thank you very much Arlolra. I documented the Parsoid configuration error you helped me find here https://www.mediawiki.org/wiki/Parsoid/Troubleshooting#Invalid_Domain_Error for others to use in the future. Sorvis (talk) 18:32, 10 March 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Update needed in the Windows setup guide to avoid damaging npm install

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


As per https://github.com/npm/npm/issues/16037

Using npm@next will corrupt the npm install and cause it to become unable to install any package. The proper command is npm@latest 186.28.53.22 (talk) 13:38, 15 March 2017 (UTC)Reply

Done. Thanks for the heads up. SSastry (WMF) (talk) 15:37, 15 March 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

npm error with the last debian package of parsoid (0.7)

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


When I launch parsoid service, I have a nodejs error :

{"name":"parsoid","hostname":"myhostname","pid":32579,"level":60,"err":{"message":"Object function Object() { [native code] } has no method 'assign'","name":"TypeError","stack":"TypeError: Object function Object() { [native code] } has no method 'assign'\n    at /usr/lib/parsoid/node_modules/service-runner/lib/master.js:209:33\n    at Promise._execute (/usr/lib/parsoid/node_modules/bluebird/js/release/debuggability.js:300:9)\n    at Promise._resolveFromExecutor (/usr/lib/parsoid/node_modules/bluebird/js/release/promise.js:481:18)\n    at new Promise (/usr/lib/parsoid/node_modules/bluebird/js/release/promise.js:77:14)\n    at Master._startWorkers (/usr/lib/parsoid/node_modules/service-runner/lib/master.js:206:16)\n    at /usr/lib/parsoid/node_modules/service-runner/lib/master.js:107:21\n    at tryCatcher (/usr/lib/parsoid/node_modules/bluebird/js/release/util.js:16:23)\n    at Promise._settlePromiseFromHandler (/usr/lib/parsoid/node_modules/bluebird/js/release/promise.js:510:31)\n    at Promise._settlePromise (/usr/lib/parsoid/node_modules/bluebird/js/release/promise.js:567:18)\n    at Promise._settlePromise0 (/usr/lib/parsoid/node_modules/bluebird/js/release/promise.js:612:10)\n    at Promise._settlePromises (/usr/lib/parsoid/node_modules/bluebird/js/release/promise.js:691:18)\n    at Async._drainQueue (/usr/lib/parsoid/node_modules/bluebird/js/release/async.js:133:16)\n    at Async._drainQueues (/usr/lib/parsoid/node_modules/bluebird/js/release/async.js:143:10)\n    at Async.drainQueues (/usr/lib/parsoid/node_modules/bluebird/js/release/async.js:17:14)\n    at process._tickCallback (node.js:419:13)","levelPath":"fatal/service-runner/unhandled"},"msg":"Object function Object() { [native code] } has no method 'assign'","time":"2017-04-05T12:16:05.577Z","v":0}

Unhandled rejection Error: Timeout waiting for config in worker 32585

    at null._onTimeout (/usr/lib/parsoid/node_modules/service-runner/lib/worker.js:33:20)

    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 130.223.9.34 (talk) 12:26, 5 April 2017 (UTC)Reply

Looks like you're missing ES6 Object.assign()
Parsoid 0.6.1 was the last version to support node.js v0.10.x
Starting with 0.7.0, you'll need to upgrade node to v4.x
node v0.10.x is end-of-life, and no longer maintained upstream
See https://github.com/nodejs/LTS Arlolra (talk) 12:50, 5 April 2017 (UTC)Reply
Many thanks, it was the problem: I update nodejs to v6, and it works now. 130.223.9.34 (talk) 13:09, 5 April 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Please update Repo

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Got an error:
The following packages have unmet dependencies:
 parsoid : Depends: nodejs (>= 4.0.0) but 0.10.29~dfsg-2 is to be installed
=> this was fixed in an version, published a day later... 217.228.174.140 (talk) 22:25, 10 April 2017 (UTC)Reply
I assume you're running Debian Jessie? If you enable Debian Backports (see https://backports.debian.org/Instructions/) you can get an updated nodejs version that is 4.7.2. (Might need a manual sudo apt-get install nodejs -t jessie-backports to work.) Legoktm (talk) 22:31, 10 April 2017 (UTC)Reply
That's correct though, Parsoid requires node.js >= v4.x Arlolra (talk) 22:28, 10 April 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Can Parsoid and my website share the same set of SSL certificates?

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Dear supporters,

I am getting curl error 35 when using VisualEditor under SSL connection, and I had my HSTS enabled. So I currently am investigating my stunnel configuration. Can Parsoid and my website use the same set of SSL certificate? Or do I have to generate a new set?

Below is my config file.

cert = /etc/letsencrypt/live/mydomian.com/cert.pem

key = /etc/letsencrypt/live/mydomian.com/privkey.pem

CAfile = /etc/letsencrypt/live/mydomian.com/chain.pem

[www]

accept  = 8143

connect = 8142

LocalSettings.php config:

$wgVirtualRestConfig['modules']['parsoid'] = array(

// URL to the Parsoid instance

// Use port 8142 if you use the Debian package

'url' => 'https://mydomian.com:8142',

// Parsoid "domain", see below (optional)

'domain' => 'mydomian.com',

// Parsoid "prefix", see below (optional)

'prefix' => 'mydomian.com'

); MagaFun (talk) 11:01, 18 April 2017 (UTC)Reply

Yes, they can share the same TLS cert, if needed. Arlolra (talk) 12:56, 18 April 2017 (UTC)Reply
Do you happened to know any possible reasons that might produce error 35? I am out of clues. Or is this error logged more detailly somewhere else? MagaFun (talk) 12:59, 18 April 2017 (UTC)Reply
Well, first things first. Did you get Parsoid working with VE before trying to enable TLS? Are Parsoid and MediaWiki hosted on the same machine? Arlolra (talk) 13:21, 18 April 2017 (UTC)Reply
I did get Visual Editor working without TLS. Problem starts with TLS. And they are hosted on the same machine. MagaFun (talk) 13:45, 18 April 2017 (UTC)Reply
worked for me using Letsencrypt certs - I had this same error and I resolved it by opening up a new port on our azure container (8000) and then a vhost in apache to forward 8000 to localhost:8142, and then pointing mediawiki's LocalSettings.php to https://myhost:8000 - it required a bit of work in the apache config to get it working:
```<VirtualHost *:8000>
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName mydomain
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/mydomain/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/mydomain/privkey.pem
  ProxyPass / http://localhost:8142/
  ProxyPassReverse / http://localhost:8142/
</VirtualHost>``` Tansaku (talk) 12:00, 5 May 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Cannot find module

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Trying to setup parsoid on a new server, but keep running into this error when trying to start the parsoid service.

From the log file:

https://pastebin.com/mKY4N52s Facerafter (talk) 08:46, 19 April 2017 (UTC)Reply

How did you install Parsoid? Arlolra (talk) 11:46, 19 April 2017 (UTC)Reply
Followed the documentation provided to me.
https://gist.github.com/anonymous/8cffa7084d74b6f06e4b6af3a535bf77
This is for a Ubuntu 16.04 server.
We used the same for our live server and it works fine but now we are setting up a dev/test server and it suddenly doesn't work... Facerafter (talk) 13:04, 19 April 2017 (UTC)Reply
Is there any reason you aren't using the debian packages we provide? See Parsoid/Setup#Ubuntu .2F Debian
The instructions you provided are a little confusing. They point to a method that is trying to avoid using npm by cloning the deploy repo, which has the necessary dependencies already, and then invokes npm install anyways.
From the looks of it, one of your copy steps is putting things in the wrong place. Arlolra (talk) 13:16, 19 April 2017 (UTC)Reply
Trying to reinstall via the link you sent actually showed me the problem as it saw the config.yaml already existed and showed the differences.
Apparently in our old version we had: 'module: /lib/index.js' but it should be 'module: ../src/lib/index.js'
So I aborted the installation and fixed the file. But VE doesn't do anything. The last line on parsoid.log does say 'Startup finished' though. Facerafter (talk) 13:48, 19 April 2017 (UTC)Reply
Can you clarify what you mean by VE doesn't do anything? What does the VE section of your LocalSettings.php look like? Arlolra (talk) 14:05, 19 April 2017 (UTC)Reply
As in when clicking on the edit icon for VE the browser starts to load and finishes loading but nothing changes. I stay on the same page in 'viewing' mode.
Current config:
https://gist.github.com/anonymous/a1c652a4da3951a08ecc45628f2a305f Facerafter (talk) 14:11, 19 April 2017 (UTC)Reply
Is Parsoid being started on 8142 or 8000? Arlolra (talk) 14:37, 19 April 2017 (UTC)Reply
8142 Facerafter (talk) 16:51, 19 April 2017 (UTC)Reply
And what does curl http://localhost:8142/version give you? Arlolra (talk) 17:44, 19 April 2017 (UTC)Reply
{"name":"parsoid","version":"0.7.1"} Facerafter (talk) 19:22, 19 April 2017 (UTC)Reply
So, Parsoid seems up at least.
Are there any errors in the browser developer console?
Given that the last line in your parsoid.log is the startup message, it doesn't seem like VE is making any requests to it. Arlolra (talk) 21:13, 19 April 2017 (UTC)Reply
Yeah two errors but those were already in the console before trying to edit a page with VE
Exception in module-execute in module site:
and
ReferenceError: Waves is not defined ReferenceError: Waves is not defined
No new errors appear when trying to use it. Facerafter (talk) 12:38, 20 April 2017 (UTC)Reply
Do you have any other extensions installed? Try disabling them all except VE and verify that doesn't work first. Arlolra (talk) 13:02, 20 April 2017 (UTC)Reply
After disabling them all except VE and then trying to use VE results in an error in the developer console.
GET <URL>/api.php?action=visualeditor&format=json&paction=parse&page=FAQ&uselang=en 500 (Internal Server Error)
After which it keeps giving me a browser msg/notifcation/popup thing with just 'http' which keeps repeating with the error mentioned above. Facerafter (talk) 13:20, 20 April 2017 (UTC)Reply
That seems like an improvement. Is there anything in the Parsoid logs now? Arlolra (talk) 13:21, 20 April 2017 (UTC)Reply
Btw, I edited my response above (damn you are fast)
But the parsoid logs says nothing new. Facerafter (talk) 13:23, 20 April 2017 (UTC)Reply
Since the server is returning 500, you should have server error logs you can look at to figure out what's going on. Arlolra (talk) 18:50, 20 April 2017 (UTC)Reply
To be clear, I mean whatever is serving mediawiki. Not parsoid. Arlolra (talk) 18:50, 20 April 2017 (UTC)Reply
Tried complete parsoid reinstallation. But encountered the exact same error as before the reinstallation
Nothing in the apache2 error log. Facerafter (talk) 22:40, 20 April 2017 (UTC)Reply
Is this a public or private wiki? If MediaWiki is returning a 500 error, you should have something in the apache error logs. Arlolra (talk) 18:22, 21 April 2017 (UTC)Reply
Public. The developers console is displaying a 500 error when trying to use VE, the site itself works fine. Facerafter (talk) 20:45, 21 April 2017 (UTC)Reply
Can you share the url?
Maybe try enabling some debugging flags in MediaWiki to generate more informative errors,
// error_reporting( -1 );
// ini_set( 'log_errors', 1 );
// ini_set( 'error_log', '/tmp/php-error.log' ); Arlolra (talk) 01:49, 22 April 2017 (UTC)Reply
https://scwdev.czen.me
Ffs, I still think there is something wrong with my parsoid installation...
So I setup a local vm using a different install method (This one Parsoid/Setup#Ubuntu .2F Debian ) but than the /etc/mediawiki/parsoid directory is completely empty. Not config.yaml or anything...
It seems like om doing something wrong everytime... I just don't know what. Facerafter (talk) 15:06, 22 April 2017 (UTC)Reply
I don't think there's anything wrong with the Parsoid setup above.
Can you access, say, curl http://localhost:8142/localhost/v3/page/html/Magnus/21579? If so, Parsoid is fine. We established that above.
I'm noticing on your wiki that it's telling me, "You do not have permission to edit this page, for the following reason".
Can you try this https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis ?
Also, there're still an exception, "Waves is not defined". You should disable all other extensions until this is resolved. Arlolra (talk) 15:46, 22 April 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

troubleshooting parsoid

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


According to https://www.mediawiki.org/wiki/Parsoid/Troubleshooting you can test if the parsoid service is up and running and "serving" by surfing to http://yourDomain:8000/_wikitext/yourPrefix/". But 'prefix' has been removed from newer versions of Parsoid. Is there another way to test this? Hvdeynde (talk) 14:04, 10 May 2017 (UTC)Reply

you're better off trying http://localhost:8000/version Arlolra (talk) 14:08, 10 May 2017 (UTC)Reply
Thank you for your reply, but I already tested that Parsoid was up and running by accessing api.php via curl. According to the troubleshooting page, http://yourDomain:8000/_wikitext/yourPrefix/ should also help you determine whether it is actually doing what you expect to do. But as I do not know what value to enter for 'yourPrefix', I'm stuck.
(Background info: we have a private wiki that we need to run in ssl, and I'm having trouble understanding how to configure Parsoid using a self-signed certificate.) Hvdeynde (talk) 14:42, 10 May 2017 (UTC)Reply
The /_wikitext endpoint is only available if you enable the devAPI in your config.yaml
Did you set a prefix when you configured your MediaWiki api in the config.yaml?
Typically, this would look like,
- uri: 'http://yourdomain/api.php'
domain: 'yourdomain'
prefix: 'yourprefix' // optional
in which case the answer would be 'yourprefix'.
However, the easiest way to confirm it's working is to make a GET request to http://yourdomain:8000/yourdomain/v3/page/html/Main_Page
which doesn't require setting a prefix (a somewhat deprecated concept in Parsoid) Arlolra (talk) 15:05, 10 May 2017 (UTC)Reply
A GET works fine. It returns:
MediaWiki has been installed.
Consult the User's Guide for information on using the wiki software.
Getting started
    Configuration settings list
    MediaWiki FAQ
    MediaWiki release mailing list
    Localise MediaWiki for your language
    Learn how to combat spam on your wiki
But when I hit 'Edit'-tab on the Main Page, I get a pop-up with "http" and an "OK" and "Cancel" button. If I select "OK", the page opens in "Edit source" instead of "Edit".
There's nothing useful in the apache logs, nor in the parsoid logs. Hvdeynde (talk) 15:26, 10 May 2017 (UTC)Reply
At the moment, /etc/mediawiki/parsoid/config.yaml has
logging:
    level: info
What other levels exist? Hvdeynde (talk) 07:56, 11 May 2017 (UTC)Reply
const LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];
https://github.com/wikimedia/service-runner/blob/master/lib/logger.js#L9 Arlolra (talk) 20:08, 12 May 2017 (UTC)Reply
It sounds like Parsoid is setup fine, and you need to adjust your VE settings.
Are there any errors in the browser console? Arlolra (talk) 20:09, 12 May 2017 (UTC)Reply
Thanks, Arloira.
Yes, I get an Internal Server Error in the console when I select the 'Edit' tab:
load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:140 GET https://edgwiki.hit.local/hit-wiki/api.php?action=visualeditor&format=json&paction=parse&page=Main_Page&uselang=en 500 (Internal Server Error)
send @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:140
ajax @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:134
ajax @ VM131:68
get @ VM131:67
requestParsoidData @ VM132:34
requestPageData @ VM132:33
(anonymous) @ VM131:77
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:47
fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:45
add @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:45
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:47
each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:5
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:47
Deferred @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:47
then @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:46
activateTarget @ VM131:77
activatePageTarget @ VM131:77
activateVe @ VM131:84
onEditTabClick @ VM131:83
dispatch @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:65
elemData.handle @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0sz2zo7:60
Hvdeynde (talk) 16:08, 15 May 2017 (UTC)Reply
How is VE configured in your LocalSettings.php?
Also, have you followed,
https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis Arlolra (talk) 19:00, 15 May 2017 (UTC)Reply
I was trying to set up the wiki to use https for all pages and thought the issue was how to get parsoid (which apparently only works in http) to work using tls, but I now removed the ssl settings and still have no luck.
Current configuration:
/etc/mediawiki/parsoid/config.yaml
worker_heartbeat_timeout: 300000
logging:
    level: info
services:
  - module: ../src/lib/index.js
    entrypoint: apiServiceWorker
    conf:
        mwApis:
          uri: 'http://edgwiki.hit.local/hit-wiki/api.php'
        serverPort: 8142
        strictSSL: false
/var/www/html/hit-wiki/LocalSettings.php
(...)
wfLoadExtension( 'VisualEditor' );
$wgDefaultUserOptions['visualeditor-enable'] = 1;
$wgVisualEditorParsoidURL = 'http://edgwiki.hit.local';
if ( $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ) {
  $wgGroupPermissions['*']['read'] = true;
  $wgGroupPermissions['*']['edit'] = true;
};
I'd seen the https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis link, but as the parsoid service runs on the same server as the wiki, and I'm the only one who has direct login access to the server, I went with the config proposed at https://www.mediawiki.org/wiki/User:Andru~mediawikiwiki/Allow_Parsoid_Server
After each config change, I restart parsoid and apache2
Current error in the console:
load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:140 GET https://edgwiki.hit.local/hit-wiki/api.php?action=visualeditor&format=json&paction=parse&page=Main_Page&uselang=en 500 (Internal Server Error)
send @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:140
ajax @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:134
ajax @ VM1057:68
get @ VM1057:67
requestParsoidData @ VM1058:34
requestPageData @ VM1058:33
(anonymous) @ VM1057:77
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:47
fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
add @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:47
each @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:5
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:47
Deferred @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:47
then @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:46
activateTarget @ VM1057:77
(anonymous) @ VM1057:88
fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
add @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
jQuery.fn.ready @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:49
jQuery.fn.init @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:41
jQuery @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:1
(anonymous) @ VM1057:87
mw.loader.implement.css @ VM1057:93
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:161
fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
add @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
always @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:46
runScript @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:161
checkCssHandles @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:162
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:162
fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:45
fireWith @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:46
fire @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:46
fireCallbacks @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:156
addEmbeddedCSS @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:157
(anonymous) @ load.php?debug=false&lang=en&modules=jquery%2Cmediawiki&only=scripts&skin=vector&version=0p8i8gh:156
Both http://edgwiki.hit.local/hit-wiki/api.php and http://edgwiki.hit.local:8142/ work.
http://edgwiki.hit.local/hit-wiki/api.php returns the "MediaWiki API help" page, http://edgwiki.hit.local:8142/ returns the "Welcome to the Parsoid web service." page Hvdeynde (talk) 10:07, 16 May 2017 (UTC)Reply
You need to change $wgVisualEditorParsoidURL = 'http://edgwiki.hit.local';
to $wgVisualEditorParsoidURL = 'http://edgwiki.hit.local:8142';
in your LocalSettings.php
You've left out the port Arlolra (talk) 11:15, 16 May 2017 (UTC)Reply
Adding the port didn't seem to change things at first.
But at least the apache access log now held some info I could use:
10.32.14.57 - - [16/May/2017:18:00:48 +0200] "GET /hit-wiki/api.php?action=visualeditor&format=json&paction=parse&page=Main_Page&uselang=en HTTP/1.1" 500 1894 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
When I entered the url  http://edgwiki.hit.local/hit-wiki/api.php?action=visualeditor&format=json&paction=parse&page=Main_Page&uselang=en (based on the GET statement in the log), the browser gave me a full error message:
Internal Server Error
[abfbfebee7a73c6aec183569] /hit-wiki/api.php?action=visualeditor&format=json&paction=parse&page=Main_Page&uselang=en Error from line 415 of /var/www/html/mediawiki-1.28.1/includes/libs/MultiHttpClient.php: Call to undefined function curl_multi_init()
Backtrace:
#0 /var/www/html/mediawiki-1.28.1/includes/libs/MultiHttpClient.php(140): MultiHttpClient->getCurlMulti()
#1 /var/www/html/mediawiki-1.28.1/includes/libs/virtualrest/VirtualRESTServiceClient.php(250): MultiHttpClient->runMulti(array)
#2 /var/www/html/mediawiki-1.28.1/includes/libs/virtualrest/VirtualRESTServiceClient.php(146): VirtualRESTServiceClient->runMulti(array)
#3 /var/www/html/mediawiki-1.28.1/extensions/VisualEditor/ApiVisualEditor.php(97): VirtualRESTServiceClient->run(array)
#4 /var/www/html/mediawiki-1.28.1/extensions/VisualEditor/ApiVisualEditor.php(226): ApiVisualEditor->requestRestbase(string, string, array)
#5 /var/www/html/mediawiki-1.28.1/includes/api/ApiMain.php(1435): ApiVisualEditor->execute()
#6 /var/www/html/mediawiki-1.28.1/includes/api/ApiMain.php(510): ApiMain->executeAction()
#7 /var/www/html/mediawiki-1.28.1/includes/api/ApiMain.php(481): ApiMain->executeActionWithErrorHandling()
#8 /var/www/html/mediawiki-1.28.1/api.php(83): ApiMain->execute()
#9 {main}
So I installed php-curl, restarted apache2, and the next attempt resulted in this info in the apache access log:
10.32.9.143 - - [16/May/2017:18:12:04 +0200] "GET /edgwiki.hit.local/v3/page/html/Main_Page/2?redirect=false HTTP/1.1" 404 484 "-" "VisualEditor-MediaWiki/1.28.1"
10.32.14.57 - - [16/May/2017:18:12:04 +0200] "GET /hit-wiki/api.php?action=visualeditor&format=json&paction=parse&page=Main_Page&uselang=en HTTP/1.1" 200 470 "http://edgwiki.hit.local/hit-wiki/index.php/Main_Page?veaction=edit" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
The first line looks odd.  As in the second line, I expected a "GET /hit-wiki/...".
So I added the domain definition to both /etc/mediawiki/parsoid/config.yaml and /etc/mediawiki/parsoid/config.yaml, restarted apache and parsoid once more, and now we're in business.
FWIIW, I retested the url definition in LocalSettings.php at this stage and it does indeed require specifying the tcp port 8142.
So at least, after installing php-curl, adding the domain, and specifying the tcp port, it is working now for plain http.
Tomorrow, I'll start the battle to get it working in https.
Thanks for your assistance, Arlolra. Hvdeynde (talk) 16:45, 16 May 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

I installed parsoid fine two weeks ago, but now I get "Unable to locate package parsoid"

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


I installed Parsoid fine on ubuntu two weeks ago, but just trying the same commands I get:

Unable to locate package parsoid

Here's my recent commands

   14  sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys 90E9F83F22250DD7

   15  sudo apt-get update

   16  sudo apt-get install apt-transport-https

   17  sudo apt-get update && sudo apt-get install parsoid

   18  nodejs -v

   19  which nodejs

   20  cat /etc/*-release

   21  wget -qO- https://deb.nodesource.com/setup_4.x | sudo bash -

   22  sudo apt-get install nodejs

   23  which nodejs

   24  nodejs -v

   25  sudo apt-get update && sudo apt-get install parsoid

   26  sudo apt-add-repository "deb https://releases.wikimedia.org/debian jessie-mediawiki main"

   27  sudo apt-get install parsoid Tansaku (talk) 12:00, 18 May 2017 (UTC)Reply

I tested just now and didn't have any issue. What architecture are you on? Arlolra (talk) 15:10, 18 May 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid and Private wiki

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Visual Editor (and hence Parsoid) work fine, but when I want to make this wiki a private one (by denying read access to anyone who is not logged in), it stops working.

I tried changing
if ( $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ) {
  $wgGroupPermissions['*']['read'] = true;
  $wgGroupPermissions['*']['edit'] = true;
};
to

if ( $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ) {   $wgGroupPermissions['*']['read'] = true;   $wgGroupPermissions['*']['edit'] = true; } else {   $wgGroupPermissions['user']['read'] = true;   $wgGroupPermissions['*']['read'] = false; };

But that results in a fatal request because of lack of read permissions:

{"name":"../src/lib/index.js","hostname":"edgwiki","pid":5213,"level":60,"logType":"fatal/request","wiki":"wiki$0","title":"NS_SBX:SBX_Sandbox_Test_Page_1","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.28.1","msg":"API response Error for TemplateRequest: request=; error={\"code\":\"readapidenied\",\"info\":\"You need read permission to use this module\",\"*\":\"See http://edgwiki.hit.local/hit-wiki/api.php for API usage\"}","stack":"Error: API response Error for TemplateRequest: request=; error={\"code\":\"readapidenied\",\"info\":\"You need read permission to use this module\",\"*\":\"See http://edgwiki.hit.local/hit-wiki/api.php for API usage\"}\n    at TemplateRequest.ApiRequest._errorObj (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:346:9)\n    at TemplateRequest._handleJSON (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:551:16)\n    at TemplateRequest.ApiRequest._handleBody (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:473:7)\n    at TemplateRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:420:8)\n    at Request.self.callback (/usr/lib/parsoid/node_modules/request/request.js:186:22)\n    at emitTwo (events.js:87:13)\n    at Request.emit (events.js:172:7)\n    at Request.<anonymous> (/usr/lib/parsoid/node_modules/request/request.js:1081:10)\n    at emitOne (events.js:77:13)\n    at Request.emit (events.js:169:7)\n    at IncomingMessage.<anonymous> (/usr/lib/parsoid/node_modules/request/request.js:1001:12)\n    at IncomingMessage.g (events.js:260:16)\n    at emitNone (events.js:72:20)\n    at IncomingMessage.emit (events.js:166:7)\n    at endReadableNT (_stream_readable.js:905:12)\n    at nextTickCallbackWith2Args (node.js:441:9)","longMsg":"API response Error for TemplateRequest: request=; error={\"code\":\"readapidenied\",\"info\":\"You need read permission to use this module\",\"*\":\"See http://edgwiki.hit.local/hit-wiki/api.php for API usage\"}","levelPath":"fatal/request","time":"2017-05-24T13:37:38.201Z","v":0}

Could anyone assist me with this issue? Hvdeynde (talk) 13:44, 24 May 2017 (UTC)Reply
Did you see https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis Arlolra (talk) 14:29, 24 May 2017 (UTC)Reply
Yes, I saw that section.  I also saw the reference at the bottom of that section to https://www.mediawiki.org/wiki/User:Andru~mediawikiwiki/Allow_Parsoid_Server , which was the way I configured it.
Forwarding the cookies as described in https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis works. Thanks!
I suppose that means that Andru's solution is *not* valid for private wiki's?  Hvdeynde (talk) 14:35, 29 May 2017 (UTC)Reply
Did you confirm what value of $_SERVER['REMOTE_ADDR'] you're getting?
Try setting something like this in your LocalSettings.php,
ini_set( 'error_log', '/tmp/php-error.log' );
then,
error_log( $_SERVER['REMOTE_ADDR'] ); Arlolra (talk) 13:24, 30 May 2017 (UTC)Reply
That is a useful trick. Not knowing PHP, I've been wondering how to check the values of such variables.
In this case, $_SERVER['REMOTE_ADDR'] has the value of the server's IP address, not 127.0.0.1, which was the value I expected. Hvdeynde (talk) 10:14, 31 May 2017 (UTC)Reply
P.S. Replacing '127.0.0.1' in Andru's example by the server's actual IP address works fine as well. Hvdeynde (talk) 10:28, 31 May 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Strange errors

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello everyone, in our Wiki installation we are faced with the following error appearing in parsoid.log (on client side/VisualEditor we get a http 500 several time):

{"name":"../src/lib/index.js","hostname":"abcWiki","pid":2956,"level":60,"logType":"fatal/request","wiki":"wiki$0","title":"abcTitle","oldId":null,"reqId":null,"userAgent":"VisualEditor-MediaWiki/1.28.0","msg":"Failed to parse the JSON response for Template Fetch","stack":"Error\n    at TemplateRequest.ApiRequest._handleBody (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:469:12)\n    at TemplateRequest.ApiRequest._requestCB (/usr/lib/parsoid/src/lib/mw/ApiRequest.js:420:8)\n    at Request.self.callback (/usr/lib/parsoid/node_modules/request/request.js:186:22)\n    at emitTwo (events.js:125:13)\n    at Request.emit (events.js:213:7)\n    at Request.<anonymous> (/usr/lib/parsoid/node_modules/request/request.js:1081:10)\n    at emitOne (events.js:115:13)\n    at Request.emit (events.js:210:7)\n    at IncomingMessage.<anonymous> (/usr/lib/parsoid/node_modules/request/request.js:1001:12)\n    at Object.onceWrapper (events.js:312:19)\n    at emitNone (events.js:110:20)\n    at IncomingMessage.emit (events.js:207:7)\n    at endReadableNT (_stream_readable.js:1045:12)\n    at _combinedTickCallback (internal/process/next_tick.js:102:11)\n    at process._tickCallback (internal/process/next_tick.js:161:9)","httpStatus":500,"longMsg":"Failed to parse the JSON response for Template Fetch","levelPath":"fatal/request","time":"2017-06-01T12:12:26.507Z","v":0}

This error occurs when certain pages are edited. We were not able to isolate the problem since the occurance seems to have a random and status dependency. However, we have pages with a relatively complex structure which do not have this problem, and we have pages with a table containing URLs which always causes this error. Does someone has an idea how we get more detail from Parsoid which template this problem causes? Or is there something else we overlooked? Thank you in advance for your help. 194.59.120.161 (talk) 05:09, 2 June 2017 (UTC)Reply

Is your wiki public? If yes, can you paste a URL for pages on which you have this problem? SSastry (WMF) (talk) 14:55, 2 June 2017 (UTC)Reply
Unfortunately the wiki is not public. Could you describe how to further debug the problem that Parsoid has? Aschroet (talk) 07:58, 6 June 2017 (UTC)Reply
Why don't you show up on IRC (#mediawiki-parsoid) one of these days? It will be quicker to figure this out. Do note that we may not respond right away on IRC as well, but it will be a faster turnaround than here. You can then post a resolution of the problem here for everyone's benefit. SSastry (WMF) (talk) 20:38, 6 June 2017 (UTC)Reply
Seems that nobody is answering in IRC.
Meanwhile, we found out that the this API call
http://host_name/mediawiki/api.php?action=visualeditor&format=json&paction=parse&page=page_name
returns the 500:
{"error":{"code":"500","info":"docserver-http: HTTP 500","*":"See http://host_name/mediawiki/api.php for API usage"}}
Since this call is done multiple times when entering VE we get multiple dialogs with a "500". Aschroet (talk) 12:20, 8 June 2017 (UTC)Reply
We discussed on IRC, and this seemed to be caused by Apache sending an early eof, or chunking the response. Whatever the case, the JSON blob that Parsoid was receiving from MediaWiki was truncated. The user was going to investigate further. Arlolra (talk) 22:45, 12 June 2017 (UTC)Reply
The problem occurs when Parsoid tries to get the Wikitext from Mediawiki by an URL like this:
http://mediawikiserver/mediawiki/api.php?format=json&action=query&prop=info|revisions&rawcontinue=1&rvprop=content|ids|timestamp|size|sha1|contentmodel&titles=pagename
From time to time the response is truncated because of a "Connection closed by foreign host." which is definitely a network problem on our side.
However, two things i want to mention. First, cURL and browsers can deal with this problem. Maybe it is connected with the HTTP header "Connection: keep-alive" which is not supported by Parsoid. Second, i wonder why Mediawiki is not shipping the Wikitext with the request to Parsoid. Instead, Parsoid additionally calls the Wiki-API which requires that the Parsoid "server" needs the exact endpoints of the Mediawiki "clients". Aschroet (talk) 12:51, 16 June 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid + VisualEditor = unsupported?

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


In wikitech-l today, Gabriel Wicke wrote:

"In short, using Parsoid directly for visual editing is an unsupported configuration, and is likely to stop working altogether in the foreseeable future.

If this is the case, then shouldn't Parsoid/Setup say this loud and clear? RESTbase is barely mentioned at the end of the article (without any description of what it is or why you'd use it). Thank you. Maiden taiwan (talk) 16:27, 9 June 2017 (UTC)Reply

We are still debating this as we speak. When we make the formal decision to go that route, we'll make those announcements, update wikis, etc. But, as of today, that combination is supported.
But, we are trying to figure out what combination of components support what options, and at point the complexity of supporting multiple combinations overrides the benefits. We haven't yet arrived at the answers quite yet. SSastry (WMF) (talk) 17:38, 9 June 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Debian 9: error 500

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello, after upgrading to Debian 9, I get an error 500

I did not change anything in the Mediawiki, Visual Editor, Parsoid installation.

- Parsoid version: 0.5.1all

- Node version: v4.8.2

Any advice ?

LOG :

{

  "0": "Starting HTTP request: ",

  "1": {

    "method": "GET",

    "followRedirect": true,

    "uri": "http://host_name/wiki/api.php",

    "qs": {

      "format": "json",

      "action": "query",

      "meta": "siteinfo",

      "siprop": "namespaces|namespacealiases|magicwords|functionhooks|extensiontags|general|interwikimap|languages|protocols|specialpagealiases",

      "rawcontinue": 1

    },

    "timeout": 40000,

    "headers": {

      "X-Request-ID": null,

      "User-Agent": "Parsoid/0.5.0",

      "Connection": "close"

    },

    "strictSSL": true

  }

}

[warning][wiki$0/Language/Spanish/Vocabulary/Parts-of-a-tree] non-200 response: 500 <!DOCTYPE html><html><head><title>Internal Server Error</title></head><body><h1>Internal Server Error</h1><p>DB connection error<br />

</p></body></html> 176.151.92.12 (talk) 10:59, 23 June 2017 (UTC)Reply

"DB connection error" sounds like your MediaWiki may not be configured correctly. Can you first confirm that the MediaWiki action API is responding correctly.
It should look like, https://en.wikipedia.org/w/api.php Arlolra (talk) 13:16, 23 June 2017 (UTC)Reply
from the browser, the API is working correctely
from the server, it's not working
FROM THE SERVER:
curl http://[DOMAIN]//wiki/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json
Internal Server Error
DB connection error
FROM THE BROWSER
it's working
{"batchcomplete":"","query":{"pages":{"84":{"pageid":84,"ns":0,"title":"Main Page","revisions":[{"contentformat":"text/x-wiki","contentmodel":"wikitext","*":"#REDIRECT Home"}]}}}} 176.151.92.12 (talk) 15:05, 23 June 2017 (UTC)Reply
What does your $wgDBserver string say, in LocalSettings.php Arlolra (talk) 15:14, 23 June 2017 (UTC)Reply
              LocalSettings.php
              ------              
              $wgVirtualRestConfig['modules']['parsoid'] = array(
                            'url' => 'http://127.0.0.1:8142',
                            'domain' => 'localhost',
                            'prefix' => 'localhost'
              );              
              settings.js
              ------              
              parsoidConfig.setMwApi({
                     uri: 'http://xxxxx/wiki/api.php',
                     domain: 'localhost',
                     prefix: 'localhost'
              });
              parsoidConfig.serverPort = 8142; 176.151.92.12 (talk) 15:27, 23 June 2017 (UTC)Reply
Sorry, but that's not what I asked. I wanted the $wgDBserver string Arlolra (talk) 15:30, 23 June 2017 (UTC)Reply
sorry :) $wgDBserver = "localhost"; 176.151.92.12 (talk) 15:32, 23 June 2017 (UTC)Reply
Hmm, I'm not sure. You might want to ask for help at https://www.mediawiki.org/wiki/Project:Support_desk
I suspect when the above curl command works, Parsoid will as well. Arlolra (talk) 15:50, 23 June 2017 (UTC)Reply
thanks ! It might be due to an internal issue
with CURL mysql is not working event on the main site (without mediawiki) 176.151.92.12 (talk) 16:00, 23 June 2017 (UTC)Reply
when I try to connect to http://[site]/wiki/Home?veaction=edit
in the log I have:
Unexpected REMOTE_USER authentication failure. Login Error was:EmptyPass, referer: http://[site]/wiki/Home?veaction=edit 176.151.92.12 (talk) 16:20, 23 June 2017 (UTC)Reply
Is this a private wiki? Have a look at,
https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis Arlolra (talk) 16:44, 23 June 2017 (UTC)Reply
thanks but no it's public 176.151.92.12 (talk) 16:58, 23 June 2017 (UTC)Reply
Looks like that may be coming from Extension:Auth_remoteuser?
I'd suggest you disable all your other extensions when trying to get VE setup. Then enabling them one by one, and confirming nothing breaks. Arlolra (talk) 17:10, 23 June 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Timeout in VisualEditor

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hi, we have one very huge Page in one of our customers mediawiki. Editing this page will cause an alert windows after about 30 seconds witch says: "http". Not more. The Parsoid log says: ...started parsing... and then ...completed parsing in 37661 ms... so im guessing on a timeout problem. All other Pages load fast and fine. Is there a way to increase timeout? Thank you for every help and hint :-) 217.86.209.28 (talk) 11:09, 23 June 2017 (UTC)Reply

Not sure, I think you should ask on the VE talk page. Alternatively, you can try setting up RESTBase in front of Parsoid, so that the parse is cached and VE loads it fast. Arlolra (talk) 13:14, 23 June 2017 (UTC)Reply
How huge is "very huge"? Whatamidoing (WMF) (talk) 03:11, 24 June 2017 (UTC)Reply
In Plaintext we have 21801 Lines 217.86.209.28 (talk) 10:20, 30 June 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

How to Install Parsoid Service on a non Debian System without Internet connection

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello everyone,

I ran in some Problems with my current Setup where Parsoid is running on an external Server with Debian installed + Internet connection.

Is it possible to build Parsoid from source or is there any other offline solution for a Server running Red Hat. Maluxer (talk) 06:41, 29 June 2017 (UTC)Reply

Parsoid is written in JavaScript, which is an interpreted language. I suppose the only build step would be to download the dependencies.
To avoid using npm, you can clone the following, which has everything checked into one repository,
https://github.com/wikimedia/mediawiki-services-parsoid-deploy
See https://www.mediawiki.org/wiki/Parsoid/Developer_Setup#Option_1._Clone_the_mediawiki.2Fservices.2Fparsoid.2Fdeploy_repository Arlolra (talk) 13:39, 29 June 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

[FASTER] How do I connect Parsoid to hosting service?

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


I want to use visual editor on my mediawiki on my hosting service whitch has MediaWiki installed. I need to install Parsoid to avoid errors. Can you guys help? John Harry Lau (talk) 05:15, 9 August 2017 (UTC)Reply

Have you tried Parsoid/Setup? Arlolra (talk) 19:26, 9 August 2017 (UTC)Reply
Yep. John Harry Lau (talk) 03:48, 10 August 2017 (UTC)Reply
@John Harry Lau Did you get any errors when following the guide mentioned above? Reception123 (talk) 05:19, 10 August 2017 (UTC)Reply
nope. just warnings John Harry Lau (talk) 08:53, 10 August 2017 (UTC)Reply
Can you paste examples of the warnings you're seeing? Arlolra (talk) 11:39, 10 August 2017 (UTC)Reply
I didn't. Just warning about upgrades and instead issues... John Harry Lau (talk) 13:24, 10 August 2017 (UTC)Reply
Then what is the problem? Reception123 (talk) 14:04, 11 August 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

how to autostart parsoid on raspberry pi?

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


i really don't know about this.... 121.181.151.166 (talk) 10:33, 13 August 2017 (UTC)Reply

How did you install Parsoid?
If you used the debian package it comes with init and upstart scripts.
https://github.com/wikimedia/mediawiki-services-parsoid-deploy/blob/master/debian/parsoid.init
https://github.com/wikimedia/mediawiki-services-parsoid-deploy/blob/master/debian/upstart/parsoid.conf Arlolra (talk) 14:08, 13 August 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Error in the npm test for the parsoid folder?

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


I installed the parsoid and run the "npm install", everything is OK. But when I use the npm test ,Error occoured. Anyone knows the reason or give some advise?

the log file is below:

0 info it worked if it ends with ok

1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'nsp' ]

2 info using npm@5.4.0

3 info using node@v6.11.2

4 verbose run-script [ 'prensp', 'nsp', 'postnsp' ]

5 info lifecycle parsoid@0.7.1~prensp: parsoid@0.7.1

6 info lifecycle parsoid@0.7.1~nsp: parsoid@0.7.1

7 verbose lifecycle parsoid@0.7.1~nsp: unsafe-perm in lifecycle true

8 verbose lifecycle parsoid@0.7.1~nsp: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/data/wwwroot/default/mediawiki/services/parsoid/node_modules/.bin:/usr/local/lib/node_modules/npm/bin/node-gyp-bin:/data/wwwroot/default/mediawiki/services/parsoid/node_modules/.bin:/usr/local/php/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

9 verbose lifecycle parsoid@0.7.1~nsp: CWD: /data/wwwroot/default/mediawiki/services/parsoid

10 silly lifecycle parsoid@0.7.1~nsp: Args: [ '-c', 'nsp check' ]

11 silly lifecycle parsoid@0.7.1~nsp: Returned: code: 1  signal: null

12 info lifecycle parsoid@0.7.1~nsp: Failed to exec nsp script

13 verbose stack Error: parsoid@0.7.1 nsp: `nsp check`

13 verbose stack Exit status 1

13 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:280:16)

13 verbose stack     at emitTwo (events.js:106:13)

13 verbose stack     at EventEmitter.emit (events.js:191:7)

13 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)

13 verbose stack     at emitTwo (events.js:106:13)

13 verbose stack     at ChildProcess.emit (events.js:191:7)

13 verbose stack     at maybeClose (internal/child_process.js:891:16)

13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)

14 verbose pkgid parsoid@0.7.1

15 verbose cwd /data/wwwroot/default/mediawiki/services/parsoid

16 verbose Linux 3.10.0-514.26.2.el7.x86_64

17 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "nsp"

18 verbose node v6.11.2

19 verbose npm  v5.4.0

20 error code ELIFECYCLE

21 error errno 1

22 error parsoid@0.7.1 nsp: `nsp check`

22 error Exit status 1

23 error Failed at the parsoid@0.7.1 nsp script.

23 error This is probably not a problem with npm. There is likely additional logging output above.

24 verbose exit [ 1, true ] Pdwangchao (talk) 12:00, 2 September 2017 (UTC)Reply

Are there any warnings of missing packages when you run npm ls?
nsp check makes a request to nodesecurity.io, is that being rejected by a firewall or something> Arlolra (talk) 15:32, 2 September 2017 (UTC)Reply
Hi Arlolra
Thanks for your reply!
Yes, it exists.
when I use "npm ls", the output is below. I google for it but have no idea. when I run the "nsp check", nothing happened. Then I ran it again and the output is "bash: nsp: command not found..."
By the way, I install the parsoid by git clone method, and install the nodejs by yum method(v6.11.1) and then the make method(v6.11.2).
npm ls:
parsoid@0.7.1 /data/wwwroot/default/mediawiki/services/parsoid
├── alea@0.0.9
├── async@0.9.2
├─┬ babybird@0.0.1
│ ├── asap@2.0.5
│ └── is-arguments@1.0.2
├─┬ body-parser@1.17.1
│ ├── bytes@2.4.0
│ ├── content-type@1.0.2
│ ├─┬ debug@2.6.1
│ │ └── ms@0.7.2
│ ├── depd@1.1.0
│ ├─┬ http-errors@1.6.1
│ │ ├── depd@1.1.0 deduped
│ │ ├── inherits@2.0.3
│ │ ├── setprototypeof@1.0.3 deduped
│ │ └── statuses@1.3.1 deduped
│ ├── iconv-lite@0.4.15
│ ├─┬ on-finished@2.3.0
│ │ └── ee-first@1.1.1
│ ├── qs@6.4.0
│ ├─┬ raw-body@2.2.0
│ │ ├── bytes@2.4.0 deduped
│ │ ├── iconv-lite@0.4.15 deduped
│ │ └── unpipe@1.0.0 deduped
│ └─┬ type-is@1.6.15
│   ├── media-typer@0.3.0
│   └── mime-types@2.1.15 deduped
├─┬ chai@3.5.0
│ ├── assertion-error@1.0.2
│ ├─┬ deep-eql@0.1.3
│ │ └── type-detect@0.1.1
│ └── type-detect@1.0.0
├── colors@1.1.2
├─┬ compression@1.6.2
│ ├─┬ accepts@1.3.3
│ │ ├── mime-types@2.1.15 deduped
│ │ └── negotiator@0.6.1 deduped (git+https://github.com/arlolra/negotiator.git#0418ab4e9a665772b7e233564a4525c9d9a8ec3a)
│ ├── bytes@2.3.0
│ ├─┬ compressible@2.0.10
│ │ └── mime-db@1.27.0
│ ├─┬ debug@2.2.0
│ │ └── ms@0.7.1
│ ├── on-headers@1.0.1
│ └── vary@1.1.1
├─┬ connect-busboy@0.0.2
│ └─┬ busboy@0.2.14
│   ├─┬ dicer@0.2.5
│   │ ├── readable-stream@1.1.14 deduped
│   │ └── streamsearch@0.1.2
│   └─┬ readable-stream@1.1.14
│     ├── core-util-is@1.0.2
│     ├── inherits@2.0.3 deduped
│     ├── isarray@0.0.1
│     └── string_decoder@0.10.31
├── content-type@1.0.1 (git+https://github.com/wikimedia/content-type.git#47b2632d0a2ee79a7d67268e2f6621becd95d05b)
├── core-js@2.4.1
├─┬ coveralls@2.13.0
│ ├─┬ js-yaml@3.6.1
│ │ ├── argparse@1.0.9 deduped
│ │ └── esprima@2.7.3
│ ├── lcov-parse@0.0.10
│ ├── log-driver@1.2.5
│ ├── minimist@1.2.0
│ └─┬ request@2.79.0
│   ├── aws-sign2@0.6.0 deduped
│   ├── aws4@1.6.0 deduped
│   ├── caseless@0.11.0
│   ├── combined-stream@1.0.5 deduped
│   ├── extend@3.0.0 deduped
│   ├── forever-agent@0.6.1 deduped
│   ├── form-data@2.1.2 deduped
│   ├─┬ har-validator@2.0.6
│   │ ├── chalk@1.1.3 deduped
│   │ ├─┬ commander@2.9.0
│   │ │ └── graceful-readlink@1.0.1
│   │ ├── is-my-json-valid@2.16.0 deduped
│   │ └─┬ pinkie-promise@2.0.1
│   │   └── pinkie@2.0.4
│   ├── hawk@3.1.3 deduped
│   ├── http-signature@1.1.1 deduped
│   ├── is-typedarray@1.0.0 deduped
│   ├── isstream@0.1.2 deduped
│   ├── json-stringify-safe@5.0.1 deduped
│   ├── mime-types@2.1.15 deduped
│   ├── oauth-sign@0.8.2 deduped
│   ├── qs@6.3.2
│   ├── stringstream@0.0.5 deduped
│   ├── tough-cookie@2.3.2 deduped
│   ├── tunnel-agent@0.4.3
│   └── uuid@3.0.1
├── diff@1.4.0
├── domino@1.0.28
├── entities@1.1.1
├─┬ eslint@3.19.0
│ ├─┬ babel-code-frame@6.22.0
│ │ ├── chalk@1.1.3 deduped
│ │ ├── esutils@2.0.2 deduped
│ │ └── js-tokens@3.0.1
│ ├─┬ chalk@1.1.3
│ │ ├── ansi-styles@2.2.1
│ │ ├── escape-string-regexp@1.0.5
│ │ ├─┬ has-ansi@2.0.0
│ │ │ └── ansi-regex@2.1.1 deduped
│ │ ├─┬ strip-ansi@3.0.1
│ │ │ └── ansi-regex@2.1.1 deduped
│ │ └── supports-color@2.0.0
│ ├─┬ concat-stream@1.6.0
│ │ ├── inherits@2.0.3 deduped
│ │ ├─┬ readable-stream@2.2.9
│ │ │ ├── buffer-shims@1.0.0
│ │ │ ├── core-util-is@1.0.2 deduped
│ │ │ ├── inherits@2.0.3 deduped
│ │ │ ├── isarray@1.0.0
│ │ │ ├── process-nextick-args@1.0.7
│ │ │ ├─┬ string_decoder@1.0.0
│ │ │ │ └── buffer-shims@1.0.0 deduped
│ │ │ └── util-deprecate@1.0.2
│ │ └── typedarray@0.0.6
│ ├── debug@2.6.1 deduped
│ ├─┬ doctrine@2.0.0
│ │ ├── esutils@2.0.2 deduped
│ │ └── isarray@1.0.0
│ ├─┬ escope@3.6.0
│ │ ├─┬ es6-map@0.1.5
│ │ │ ├─┬ d@1.0.0
│ │ │ │ └── es5-ext@0.10.15 deduped
│ │ │ ├─┬ es5-ext@0.10.15
│ │ │ │ ├── es6-iterator@2.0.1 deduped
│ │ │ │ └── es6-symbol@3.1.1 deduped
│ │ │ ├─┬ es6-iterator@2.0.1
│ │ │ │ ├── d@1.0.0 deduped
│ │ │ │ ├── es5-ext@0.10.15 deduped
│ │ │ │ └── es6-symbol@3.1.1 deduped
│ │ │ ├─┬ es6-set@0.1.5
│ │ │ │ ├── d@1.0.0 deduped
│ │ │ │ ├── es5-ext@0.10.15 deduped
│ │ │ │ ├── es6-iterator@2.0.1 deduped
│ │ │ │ ├── es6-symbol@3.1.1 deduped
│ │ │ │ └── event-emitter@0.3.5 deduped
│ │ │ ├─┬ es6-symbol@3.1.1
│ │ │ │ ├── d@1.0.0 deduped
│ │ │ │ └── es5-ext@0.10.15 deduped
│ │ │ └─┬ event-emitter@0.3.5
│ │ │   ├── d@1.0.0 deduped
│ │ │   └── es5-ext@0.10.15 deduped
│ │ ├─┬ es6-weak-map@2.0.2
│ │ │ ├── d@1.0.0 deduped
│ │ │ ├── es5-ext@0.10.15 deduped
│ │ │ ├── es6-iterator@2.0.1 deduped
│ │ │ └── es6-symbol@3.1.1 deduped
│ │ ├─┬ esrecurse@4.1.0
│ │ │ ├── estraverse@4.1.1
│ │ │ └── object-assign@4.1.1 deduped
│ │ └── estraverse@4.2.0
│ ├─┬ espree@3.4.2
│ │ ├── acorn@5.0.3
│ │ └─┬ acorn-jsx@3.0.1
│ │   └── acorn@3.3.0
│ ├─┬ esquery@1.0.0
│ │ └── estraverse@4.2.0
│ ├── estraverse@4.2.0
│ ├── esutils@2.0.2
│ ├─┬ file-entry-cache@2.0.0
│ │ ├─┬ flat-cache@1.2.2
│ │ │ ├── circular-json@0.3.1
│ │ │ ├─┬ del@2.2.2
│ │ │ │ ├─┬ globby@5.0.0
│ │ │ │ │ ├─┬ array-union@1.0.2
│ │ │ │ │ │ └── array-uniq@1.0.3
│ │ │ │ │ ├── arrify@1.0.1
│ │ │ │ │ ├─┬ glob@7.1.1
│ │ │ │ │ │ ├── fs.realpath@1.0.0 deduped
│ │ │ │ │ │ ├── inflight@1.0.6 deduped
│ │ │ │ │ │ ├── inherits@2.0.3 deduped
│ │ │ │ │ │ ├── minimatch@3.0.3 deduped
│ │ │ │ │ │ ├── once@1.4.0 deduped
│ │ │ │ │ │ └── path-is-absolute@1.0.1 deduped
│ │ │ │ │ ├── object-assign@4.1.1 deduped
│ │ │ │ │ ├── pify@2.3.0 deduped
│ │ │ │ │ └── pinkie-promise@2.0.1 deduped
│ │ │ │ ├── is-path-cwd@1.0.0
│ │ │ │ ├─┬ is-path-in-cwd@1.0.0
│ │ │ │ │ └─┬ is-path-inside@1.0.0
│ │ │ │ │   └── path-is-inside@1.0.2 deduped
│ │ │ │ ├── object-assign@4.1.1 deduped
│ │ │ │ ├── pify@2.3.0
│ │ │ │ ├── pinkie-promise@2.0.1 deduped
│ │ │ │ └─┬ rimraf@2.6.1
│ │ │ │   └─┬ glob@7.1.1
│ │ │ │     ├── fs.realpath@1.0.0 deduped
│ │ │ │     ├── inflight@1.0.6 deduped
│ │ │ │     ├── inherits@2.0.3 deduped
│ │ │ │     ├── minimatch@3.0.3 deduped
│ │ │ │     ├── once@1.4.0 deduped
│ │ │ │     └── path-is-absolute@1.0.1 deduped
│ │ │ ├── graceful-fs@4.1.11 deduped
│ │ │ └─┬ write@0.2.1
│ │ │   └── mkdirp@0.5.1 deduped
│ │ └── object-assign@4.1.1
│ ├─┬ glob@7.1.1
│ │ ├── fs.realpath@1.0.0
│ │ ├─┬ inflight@1.0.6
│ │ │ ├── once@1.4.0 deduped
│ │ │ └── wrappy@1.0.2 deduped
│ │ ├── inherits@2.0.3 deduped
│ │ ├─┬ minimatch@3.0.3
│ │ │ └─┬ brace-expansion@1.1.6
│ │ │   ├── balanced-match@0.4.2
│ │ │   └── concat-map@0.0.1
│ │ ├── once@1.4.0 deduped
│ │ └── path-is-absolute@1.0.1
│ ├── globals@9.17.0
│ ├── ignore@3.2.7
│ ├── imurmurhash@0.1.4
│ ├─┬ inquirer@0.12.0
│ │ ├── ansi-escapes@1.4.0
│ │ ├── ansi-regex@2.1.1
│ │ ├── chalk@1.1.3 deduped
│ │ ├─┬ cli-cursor@1.0.2
│ │ │ └─┬ restore-cursor@1.0.1
│ │ │   ├── exit-hook@1.1.1
│ │ │   └── onetime@1.1.0
│ │ ├── cli-width@2.1.0
│ │ ├─┬ figures@1.7.0
│ │ │ ├── escape-string-regexp@1.0.5 deduped
│ │ │ └── object-assign@4.1.1 deduped
│ │ ├── lodash@4.17.4
│ │ ├─┬ readline2@1.0.1
│ │ │ ├── code-point-at@1.1.0 deduped
│ │ │ ├── is-fullwidth-code-point@1.0.0 deduped
│ │ │ └── mute-stream@0.0.5
│ │ ├─┬ run-async@0.1.0
│ │ │ └── once@1.4.0 deduped
│ │ ├── rx-lite@3.1.2
│ │ ├── string-width@1.0.2 deduped
│ │ ├── strip-ansi@3.0.1 deduped
│ │ └── through@2.3.8
│ ├─┬ is-my-json-valid@2.16.0
│ │ ├── generate-function@2.0.0
│ │ ├─┬ generate-object-property@1.2.0
│ │ │ └── is-property@1.0.2
│ │ ├── jsonpointer@4.0.1
│ │ └── xtend@4.0.1
│ ├─┬ is-resolvable@1.0.0
│ │ └── tryit@1.0.3
│ ├── js-yaml@3.8.3 deduped
│ ├─┬ json-stable-stringify@1.0.1
│ │ └── jsonify@0.0.0
│ ├─┬ levn@0.3.0
│ │ ├── prelude-ls@1.1.2
│ │ └─┬ type-check@0.3.2
│ │   └── prelude-ls@1.1.2 deduped
│ ├── lodash@4.17.4
│ ├─┬ mkdirp@0.5.1
│ │ └── minimist@0.0.8
│ ├── natural-compare@1.4.0
│ ├─┬ optionator@0.8.2
│ │ ├── deep-is@0.1.3
│ │ ├── fast-levenshtein@2.0.6
│ │ ├── levn@0.3.0 deduped
│ │ ├── prelude-ls@1.1.2 deduped
│ │ ├── type-check@0.3.2 deduped
│ │ └── wordwrap@1.0.0
│ ├── path-is-inside@1.0.2
│ ├── pluralize@1.2.1
│ ├── progress@1.1.8
│ ├─┬ require-uncached@1.0.3
│ │ ├─┬ caller-path@0.1.0
│ │ │ └── callsites@0.2.0
│ │ └── resolve-from@1.0.1
│ ├─┬ shelljs@0.7.7
│ │ ├── glob@7.1.1 deduped
│ │ ├── interpret@1.0.3
│ │ └─┬ rechoir@0.6.2
│ │   └── resolve@1.1.7 deduped
│ ├── strip-bom@3.0.0
│ ├── strip-json-comments@2.0.1
│ ├─┬ table@3.8.3
│ │ ├─┬ ajv@4.11.5
│ │ │ ├── co@4.6.0
│ │ │ └── json-stable-stringify@1.0.1 deduped
│ │ ├── ajv-keywords@1.5.1
│ │ ├── chalk@1.1.3 deduped
│ │ ├── lodash@4.17.4
│ │ ├── slice-ansi@0.0.4
│ │ └─┬ string-width@2.0.0
│ │   ├── is-fullwidth-code-point@2.0.0
│ │   └── strip-ansi@3.0.1 deduped
│ ├── text-table@0.2.0
│ └─┬ user-home@2.0.0
│   └── os-homedir@1.0.2
├── eslint-config-node-services@2.1.1
├─┬ eslint-plugin-jsdoc@3.0.2
│ ├─┬ comment-parser@0.4.0
│ │ └─┬ readable-stream@2.2.9
│ │   ├── buffer-shims@1.0.0 deduped
│ │   ├── core-util-is@1.0.2 deduped
│ │   ├── inherits@2.0.3 deduped
│ │   ├── isarray@1.0.0
│ │   ├── process-nextick-args@1.0.7 deduped
│ │   ├─┬ string_decoder@1.0.0
│ │   │ └── buffer-shims@1.0.0 deduped
│ │   └── util-deprecate@1.0.2 deduped
│ └── lodash@4.17.4
├─┬ eslint-plugin-json@1.2.0
│ └─┬ jshint@2.9.4
│   ├─┬ cli@1.0.1
│   │ ├── exit@0.1.2 deduped
│   │ └─┬ glob@7.1.1
│   │   ├── fs.realpath@1.0.0 deduped
│   │   ├── inflight@1.0.6 deduped
│   │   ├── inherits@2.0.3 deduped
│   │   ├── minimatch@3.0.3 deduped
│   │   ├── once@1.4.0 deduped
│   │   └── path-is-absolute@1.0.1 deduped
│   ├─┬ console-browserify@1.1.0
│   │ └── date-now@0.1.4
│   ├── exit@0.1.2
│   ├─┬ htmlparser2@3.8.3
│   │ ├── domelementtype@1.3.0
│   │ ├─┬ domhandler@2.3.0
│   │ │ └── domelementtype@1.3.0 deduped
│   │ ├─┬ domutils@1.5.1
│   │ │ ├─┬ dom-serializer@0.1.0
│   │ │ │ ├── domelementtype@1.1.3
│   │ │ │ └── entities@1.1.1 deduped
│   │ │ └── domelementtype@1.3.0 deduped
│   │ ├── entities@1.0.0
│   │ └── readable-stream@1.1.14 deduped
│   ├── lodash@3.7.0
│   ├── minimatch@3.0.3 deduped
│   ├── shelljs@0.3.0
│   └── strip-json-comments@1.0.4
├─┬ express@4.15.2
│ ├── accepts@1.3.3 deduped
│ ├── array-flatten@1.1.1
│ ├── content-disposition@0.5.2
│ ├── content-type@1.0.2
│ ├── cookie@0.3.1
│ ├── cookie-signature@1.0.6
│ ├── debug@2.6.1 deduped
│ ├── depd@1.1.0 deduped
│ ├── encodeurl@1.0.1
│ ├── escape-html@1.0.3
│ ├── etag@1.8.0
│ ├── finalhandler@1.0.1 deduped
│ ├── fresh@0.5.0
│ ├── merge-descriptors@1.0.1
│ ├── methods@1.1.2
│ ├── on-finished@2.3.0 deduped
│ ├── parseurl@1.3.1
│ ├── path-to-regexp@0.1.7
│ ├─┬ proxy-addr@1.1.4
│ │ ├── forwarded@0.1.0
│ │ └── ipaddr.js@1.3.0
│ ├── qs@6.4.0 deduped
│ ├── range-parser@1.2.0
│ ├─┬ send@0.15.1
│ │ ├── debug@2.6.1 deduped
│ │ ├── depd@1.1.0 deduped
│ │ ├── destroy@1.0.4
│ │ ├── encodeurl@1.0.1 deduped
│ │ ├── escape-html@1.0.3 deduped
│ │ ├── etag@1.8.0 deduped
│ │ ├── fresh@0.5.0 deduped
│ │ ├── http-errors@1.6.1 deduped
│ │ ├── mime@1.3.4
│ │ ├── ms@0.7.2 deduped
│ │ ├── on-finished@2.3.0 deduped
│ │ ├── range-parser@1.2.0 deduped
│ │ └── statuses@1.3.1 deduped
│ ├─┬ serve-static@1.12.1
│ │ ├── encodeurl@1.0.1 deduped
│ │ ├── escape-html@1.0.3 deduped
│ │ ├── parseurl@1.3.1 deduped
│ │ └── send@0.15.1 deduped
│ ├── setprototypeof@1.0.3
│ ├── statuses@1.3.1
│ ├── type-is@1.6.15 deduped
│ ├── utils-merge@1.0.0
│ └── vary@1.1.1 deduped
├─┬ express-handlebars@3.0.0
│ ├─┬ glob@6.0.4
│ │ ├── inflight@1.0.6 deduped
│ │ ├── inherits@2.0.3 deduped
│ │ ├── minimatch@3.0.3 deduped
│ │ ├── once@1.4.0 deduped
│ │ └── path-is-absolute@1.0.1 deduped
│ ├── graceful-fs@4.1.11
│ ├─┬ handlebars@4.0.6
│ │ ├── async@1.5.2
│ │ ├─┬ optimist@0.6.1
│ │ │ ├── minimist@0.0.10
│ │ │ └── wordwrap@0.0.3
│ │ ├─┬ source-map@0.4.4
│ │ │ └── amdefine@1.0.1
│ │ └── UNMET OPTIONAL DEPENDENCY uglify-js@^2.6
│ ├─┬ object.assign@4.0.4
│ │ ├─┬ define-properties@1.1.2
│ │ │ ├── foreach@2.0.5
│ │ │ └── object-keys@1.0.11 deduped
│ │ ├── function-bind@1.1.0
│ │ └── object-keys@1.0.11
│ └─┬ promise@7.1.1
│   └── asap@2.0.5 deduped
├─┬ finalhandler@1.0.1
│ ├─┬ debug@2.6.3
│ │ └── ms@0.7.2 deduped
│ ├── encodeurl@1.0.1 deduped
│ ├── escape-html@1.0.3 deduped
│ ├── on-finished@2.3.0 deduped
│ ├── parseurl@1.3.1 deduped
│ ├── statuses@1.3.1 deduped
│ └── unpipe@1.0.0
├─┬ istanbul@0.4.5
│ ├── abbrev@1.0.9
│ ├── async@1.5.2
│ ├─┬ escodegen@1.8.1
│ │ ├── esprima@2.7.3
│ │ ├── estraverse@1.9.3
│ │ ├── esutils@2.0.2 deduped
│ │ ├── optionator@0.8.2 deduped
│ │ └── source-map@0.4.4 deduped
│ ├── esprima@2.7.3
│ ├─┬ glob@5.0.15
│ │ ├── inflight@1.0.6 deduped
│ │ ├── inherits@2.0.3 deduped
│ │ ├── minimatch@3.0.3 deduped
│ │ ├── once@1.4.0 deduped
│ │ └── path-is-absolute@1.0.1 deduped
│ ├── handlebars@4.0.6 deduped
│ ├── js-yaml@3.8.3 deduped
│ ├── mkdirp@0.5.1 deduped
│ ├─┬ nopt@3.0.6
│ │ └── abbrev@1.0.9 deduped
│ ├─┬ once@1.4.0
│ │ └── wrappy@1.0.2
│ ├── resolve@1.1.7
│ ├─┬ supports-color@3.2.3
│ │ └── has-flag@1.0.0
│ ├─┬ which@1.2.14
│ │ └── isexe@2.0.0
│ └── wordwrap@1.0.0
├─┬ js-yaml@3.8.3
│ ├─┬ argparse@1.0.9
│ │ └── sprintf-js@1.0.3
│ └── esprima@3.1.3
├── mediawiki-title@0.6.3
├─┬ mocha@2.5.3
│ ├── commander@2.3.0
│ ├─┬ debug@2.2.0
│ │ └── ms@0.7.1
│ ├── diff@1.4.0 deduped
│ ├── escape-string-regexp@1.0.2
│ ├─┬ glob@3.2.11
│ │ ├── inherits@2.0.3 deduped
│ │ └─┬ minimatch@0.3.0
│ │   ├── lru-cache@2.7.3
│ │   └── sigmund@1.0.1
│ ├── growl@1.9.2
│ ├─┬ jade@0.26.3
│ │ ├── commander@0.6.1
│ │ └── mkdirp@0.3.0
│ ├── mkdirp@0.5.1 deduped
│ ├── supports-color@1.2.0
│ └── to-iso-string@0.0.2
├── negotiator@0.6.1 (git+https://github.com/arlolra/negotiator.git#0418ab4e9a665772b7e233564a4525c9d9a8ec3a)
├─┬ nock@8.2.1
│ ├── chai@3.5.0 deduped
│ ├── debug@2.6.1 deduped
│ ├── deep-equal@1.0.1
│ ├── json-stringify-safe@5.0.1
│ ├── lodash@4.9.0
│ ├── mkdirp@0.5.1 deduped
│ ├── propagate@0.4.0
│ └── qs@6.4.0 deduped
├── node-uuid@1.4.8
├─┬ nsp@2.6.3
│ ├─┬ chalk@1.1.3
│ │ ├── ansi-styles@2.2.1
│ │ ├── escape-string-regexp@1.0.5
│ │ ├─┬ has-ansi@2.0.0
│ │ │ └── ansi-regex@2.0.0
│ │ ├─┬ strip-ansi@3.0.1
│ │ │ └── ansi-regex@2.0.0
│ │ └── supports-color@2.0.0
│ ├─┬ cli-table@0.3.1
│ │ └── colors@1.0.3
│ ├── cvss@1.0.1
│ ├─┬ https-proxy-agent@1.0.0
│ │ ├─┬ agent-base@2.0.1
│ │ │ ├── extend@3.0.0 deduped
│ │ │ └── semver@5.0.3
│ │ ├─┬ debug@2.2.0
│ │ │ └── ms@0.7.1
│ │ └── extend@3.0.0
│ ├─┬ joi@6.10.1
│ │ ├── hoek@2.16.3
│ │ ├── isemail@1.2.0
│ │ ├── moment@2.12.0
│ │ └─┬ topo@1.1.0
│ │   └── hoek@2.16.3 deduped
│ ├── nodesecurity-npm-utils@5.0.0
│ ├── path-is-absolute@1.0.0
│ ├─┬ rc@1.1.6
│ │ ├── deep-extend@0.4.1
│ │ ├── ini@1.3.4
│ │ ├── minimist@1.2.0
│ │ └── strip-json-comments@1.0.4
│ ├── semver@5.1.0
│ ├─┬ subcommand@2.0.3
│ │ ├── cliclopts@1.1.1
│ │ ├─┬ debug@2.2.0
│ │ │ └── ms@0.7.1
│ │ ├── minimist@1.2.0
│ │ └── xtend@4.0.1
│ └─┬ wreck@6.3.0
│   ├─┬ boom@2.10.1
│   │ └── hoek@2.16.3 deduped
│   └── hoek@2.16.3
├── pegjs@0.8.0 (git+https://github.com/tstarling/pegjs.git#36d584bd7bbc564c86c058c5dfe8053b1fe1d584)
├─┬ prfun@2.1.4
│ └── core-js@2.4.1 deduped
├─┬ request@2.81.0
│ ├── aws-sign2@0.6.0
│ ├── aws4@1.6.0
│ ├── caseless@0.12.0
│ ├─┬ combined-stream@1.0.5
│ │ └── delayed-stream@1.0.0
│ ├── extend@3.0.0
│ ├── forever-agent@0.6.1
│ ├─┬ form-data@2.1.2
│ │ ├── asynckit@0.4.0
│ │ ├── combined-stream@1.0.5 deduped
│ │ └── mime-types@2.1.15 deduped
│ ├─┬ har-validator@4.2.1
│ │ ├── ajv@4.11.5 deduped
│ │ └── har-schema@1.0.5
│ ├─┬ hawk@3.1.3
│ │ ├─┬ boom@2.10.1
│ │ │ └── hoek@2.16.3 deduped
│ │ ├─┬ cryptiles@2.0.5
│ │ │ └── boom@2.10.1 deduped
│ │ ├── hoek@2.16.3
│ │ └─┬ sntp@1.0.9
│ │   └── hoek@2.16.3 deduped
│ ├─┬ http-signature@1.1.1
│ │ ├── assert-plus@0.2.0
│ │ ├─┬ jsprim@1.4.0
│ │ │ ├── assert-plus@1.0.0
│ │ │ ├── extsprintf@1.0.2
│ │ │ ├── json-schema@0.2.3
│ │ │ └─┬ verror@1.3.6
│ │ │   └── extsprintf@1.0.2 deduped
│ │ └─┬ sshpk@1.11.0
│ │   ├── asn1@0.2.3
│ │   ├── assert-plus@1.0.0
│ │   ├── UNMET OPTIONAL DEPENDENCY bcrypt-pbkdf@^1.0.0
│ │   ├─┬ dashdash@1.14.1
│ │   │ └── assert-plus@1.0.0
│ │   ├── UNMET OPTIONAL DEPENDENCY ecc-jsbn@~0.1.1
│ │   ├─┬ getpass@0.1.6
│ │   │ └── assert-plus@1.0.0
│ │   ├── UNMET OPTIONAL DEPENDENCY jodid25519@^1.0.0
│ │   ├── UNMET OPTIONAL DEPENDENCY jsbn@~0.1.0
│ │   └── UNMET OPTIONAL DEPENDENCY tweetnacl@~0.14.0
│ ├── is-typedarray@1.0.0
│ ├── isstream@0.1.2
│ ├── json-stringify-safe@5.0.1 deduped
│ ├─┬ mime-types@2.1.15
│ │ └── mime-db@1.27.0 deduped
│ ├── oauth-sign@0.8.2
│ ├── performance-now@0.2.0
│ ├── qs@6.4.0 deduped
│ ├── safe-buffer@5.0.1
│ ├── stringstream@0.0.5
│ ├─┬ tough-cookie@2.3.2
│ │ └── punycode@1.4.1
│ ├─┬ tunnel-agent@0.6.0
│ │ └── safe-buffer@5.0.1 deduped
│ └── uuid@3.0.1
├── semver@5.3.0
├─┬ serve-favicon@2.4.2
│ ├── etag@1.8.0 deduped
│ ├── fresh@0.5.0 deduped
│ ├── ms@1.0.0
│ └── parseurl@1.3.1 deduped
├─┬ service-runner@2.2.5
│ ├── bluebird@3.5.0
│ ├─┬ bunyan@1.8.10
│ │ ├── UNMET OPTIONAL DEPENDENCY dtrace-provider@~0.8
│ │ ├── UNMET OPTIONAL DEPENDENCY moment@^2.10.6
│ │ ├── UNMET OPTIONAL DEPENDENCY mv@~2
│ │ └── UNMET OPTIONAL DEPENDENCY safe-json-stringify@~1
│ ├── bunyan-syslog-udp@0.1.0
│ ├─┬ dnscache@1.0.1
│ │ ├── asap@2.0.5 deduped
│ │ └─┬ lodash.clone@4.3.2
│ │   └── lodash._baseclone@4.5.7
│ ├── extend@3.0.0 deduped
│ ├─┬ gelf-stream@1.1.1
│ │ └── gelfling@0.3.1
│ ├── hot-shots@4.4.0
│ ├── js-yaml@3.8.3 deduped
│ ├─┬ limitation@0.2.0
│ │ ├── bluebird@3.5.0 deduped
│ │ ├─┬ kad@1.3.6 (git+https://github.com/gwicke/kad.git#936c91652d757ea6f9dd30e44698afb0daaa1d17)
│ │ │ ├── async@0.9.2 deduped
│ │ │ ├── clarinet@0.11.0
│ │ │ ├── colors@1.1.2 deduped
│ │ │ ├── hat@0.0.3
│ │ │ ├─┬ kad-fs@0.0.4
│ │ │ │ └─┬ readable-stream@2.2.6
│ │ │ │   ├── buffer-shims@1.0.0 deduped
│ │ │ │   ├── core-util-is@1.0.2 deduped
│ │ │ │   ├── inherits@2.0.3 deduped
│ │ │ │   ├── isarray@1.0.0
│ │ │ │   ├── process-nextick-args@1.0.7 deduped
│ │ │ │   ├── string_decoder@0.10.31 deduped
│ │ │ │   └── util-deprecate@1.0.2 deduped
│ │ │ ├─┬ kad-localstorage@0.0.7
│ │ │ │ └── dom-storage@2.0.2
│ │ │ ├─┬ kad-memstore@0.0.1
│ │ │ │ └─┬ readable-stream@2.2.6
│ │ │ │   ├── buffer-shims@1.0.0 deduped
│ │ │ │   ├── core-util-is@1.0.2 deduped
│ │ │ │   ├── inherits@2.0.3 deduped
│ │ │ │   ├── isarray@1.0.0
│ │ │ │   ├── process-nextick-args@1.0.7 deduped
│ │ │ │   ├── string_decoder@0.10.31 deduped
│ │ │ │   └── util-deprecate@1.0.2 deduped
│ │ │ ├── lodash@3.10.1
│ │ │ ├── merge@1.2.0
│ │ │ ├── ms@0.7.2 deduped
│ │ │ └─┬ msgpack5@3.4.1
│ │ │   ├─┬ bl@1.2.0
│ │ │   │ └─┬ readable-stream@2.2.6
│ │ │   │   ├── buffer-shims@1.0.0 deduped
│ │ │   │   ├── core-util-is@1.0.2 deduped
│ │ │   │   ├── inherits@2.0.3 deduped
│ │ │   │   ├── isarray@1.0.0
│ │ │   │   ├── process-nextick-args@1.0.7 deduped
│ │ │   │   ├── string_decoder@0.10.31 deduped
│ │ │   │   └── util-deprecate@1.0.2 deduped
│ │ │   ├── inherits@2.0.3 deduped
│ │ │   └─┬ readable-stream@2.2.6
│ │ │     ├── buffer-shims@1.0.0 deduped
│ │ │     ├── core-util-is@1.0.2 deduped
│ │ │     ├── inherits@2.0.3 deduped
│ │ │     ├── isarray@1.0.0
│ │ │     ├── process-nextick-args@1.0.7 deduped
│ │ │     ├── string_decoder@0.10.31 deduped
│ │ │     └── util-deprecate@1.0.2 deduped
│ │ └─┬ readable-stream@2.2.6
│ │   ├── buffer-shims@1.0.0 deduped
│ │   ├── core-util-is@1.0.2 deduped
│ │   ├── inherits@2.0.3 deduped
│ │   ├── isarray@1.0.0
│ │   ├── process-nextick-args@1.0.7 deduped
│ │   ├── string_decoder@0.10.31 deduped
│ │   └── util-deprecate@1.0.2 deduped
│ ├── semver@5.3.0 deduped
│ └── yargs@6.6.0 deduped
├── simplediff@0.1.1
├─┬ supertest@1.2.0
│ ├── methods@1.1.2 deduped
│ └─┬ superagent@1.8.5
│   ├── component-emitter@1.2.1
│   ├── cookiejar@2.0.6
│   ├── debug@2.6.1 deduped
│   ├── extend@3.0.0 deduped
│   ├─┬ form-data@1.0.0-rc3
│   │ ├── async@1.5.2
│   │ ├── combined-stream@1.0.5 deduped
│   │ └── mime-types@2.1.15 deduped
│   ├── formidable@1.0.17
│   ├── methods@1.1.2 deduped
│   ├── mime@1.3.4 deduped
│   ├── qs@2.3.3
│   ├─┬ readable-stream@1.0.27-1
│   │ ├── core-util-is@1.0.2 deduped
│   │ ├── inherits@2.0.3 deduped
│   │ ├── isarray@0.0.1 deduped
│   │ └── string_decoder@0.10.31 deduped
│   └── reduce-component@1.0.1
└─┬ yargs@6.6.0
  ├── camelcase@3.0.0
  ├─┬ cliui@3.2.0
  │ ├── string-width@1.0.2 deduped
  │ ├── strip-ansi@3.0.1 deduped
  │ └─┬ wrap-ansi@2.1.0
  │   ├── string-width@1.0.2 deduped
  │   └── strip-ansi@3.0.1 deduped
  ├── decamelize@1.2.0
  ├── get-caller-file@1.0.2
  ├─┬ os-locale@1.4.0
  │ └─┬ lcid@1.0.0
  │   └── invert-kv@1.0.0
  ├─┬ read-pkg-up@1.0.1
  │ ├─┬ find-up@1.1.2
  │ │ ├─┬ path-exists@2.1.0
  │ │ │ └── pinkie-promise@2.0.1 deduped
  │ │ └── pinkie-promise@2.0.1 deduped
  │ └─┬ read-pkg@1.1.0
  │   ├─┬ load-json-file@1.1.0
  │   │ ├── graceful-fs@4.1.11 deduped
  │   │ ├─┬ parse-json@2.2.0
  │   │ │ └─┬ error-ex@1.3.1
  │   │ │   └── is-arrayish@0.2.1
  │   │ ├── pify@2.3.0 deduped
  │   │ ├── pinkie-promise@2.0.1 deduped
  │   │ └─┬ strip-bom@2.0.0
  │   │   └── is-utf8@0.2.1
  │   ├─┬ normalize-package-data@2.3.6
  │   │ ├── hosted-git-info@2.4.1
  │   │ ├─┬ is-builtin-module@1.0.0
  │   │ │ └── builtin-modules@1.1.1
  │   │ ├── semver@5.3.0 deduped
  │   │ └─┬ validate-npm-package-license@3.0.1
  │   │   ├─┬ spdx-correct@1.0.2
  │   │   │ └── spdx-license-ids@1.2.2
  │   │   └── spdx-expression-parse@1.0.4
  │   └─┬ path-type@1.1.0
  │     ├── graceful-fs@4.1.11 deduped
  │     ├── pify@2.3.0 deduped
  │     └── pinkie-promise@2.0.1 deduped
  ├── require-directory@2.1.1
  ├── require-main-filename@1.0.1
  ├── set-blocking@2.0.0
  ├─┬ string-width@1.0.2
  │ ├── code-point-at@1.1.0
  │ ├─┬ is-fullwidth-code-point@1.0.0
  │ │ └── number-is-nan@1.0.1
  │ └── strip-ansi@3.0.1 deduped
  ├── which-module@1.0.0
  ├── y18n@3.2.1
  └─┬ yargs-parser@4.2.1
    └── camelcase@3.0.0 deduped Pdwangchao (talk) 03:00, 3 September 2017 (UTC)Reply
Hi Arlolra
 
Er... It is solved by this method:
https://www.centos.org/forums/viewtopic.php?f=47&t=53223&p=225372#p225372
I just run the code step by step and everything is OK. So I think the position of parsoid make the difference. Amazing. people meeting the same question just do step by step.....
Also thanks to you, Arlolra
  Pdwangchao (talk) 08:49, 4 September 2017 (UTC)Reply
======== English ========
According to this website https://www.centos.org/forums/viewtopic.php?f=47&t=53223&p=225372#p225372 all commands were executed.
The following should be set in the LocalSettings.php file from MediaWiki:
# Namespces for VE
$ wgVisualEditorNamespaces = array_merge (
         $ WgContentNamespaces,
         array (*)
);
The following error is logged when the website is accessed:
FastCGI sent in stderr: "PHP message: PHP Parse error: syntax error, unexpected '*', expecting ')' in /usr/share/mediawiki/mediawiki-1.34.0/LocalSettings.php on line 130"
Line 130 specifies "array (*)".
Can anyone help?
======== German ========
Gemäß dieser Webseite https://www.centos.org/forums/viewtopic.php?f=47&t=53223&p=225372#p225372 wurden alle Befehle ausgeführt.
In der Datei LocalSettings.php vom MediaWiki soll folgendes eingestellt werden:
# Namespces for VE
$wgVisualEditorNamespaces = array_merge(
        $wgContentNamespaces,
        array( * )
);
Beim Aufruf der Webseite wird folgender Fehler protokolliert:
FastCGI sent in stderr: "PHP message: PHP Parse error:  syntax error, unexpected '*', expecting ')' in /usr/share/mediawiki/mediawiki-1.34.0/LocalSettings.php on line 130"
In Zeile 130 ist "array( * )" angegeben.
Kann jemand weiterhelfen? Benn2003 (talk) 20:03, 18 February 2020 (UTC)Reply
$wgVisualEditorNamespaces was the config for which namespaces to enable VE.
The default was array( NS_MAIN ), so you can try that.
I imagine the * was just a stand in for all of them. It's broken syntax. Arlolra (talk) 20:07, 13 April 2020 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Error on installing Parsoid on Ubuntu 14

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello, I'm trying to install Parsoid on my Ubuntu 14 sever.

The following packages have unmet dependencies:

 parsoid : Depends: nodejs (>= 4.0.0) but 0.10.25~dfsg2-2ubuntu1 is to be installed

E: Unable to correct problems, you have held broken packages.

Could advice me in order to fix it ? Adrianevs (talk) 20:48, 27 October 2017 (UTC)Reply

I had the same issue with Ubuntu 14.04.5. This is how I solved the problem:
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
apt-get install nodejs
apt-get install parsoid Qpn6ph9q (talk) 16:28, 17 November 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

How to install Parsoid on CentOS 6.3 without internet connection

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Because of company firewall. it is impossible to start npm install(for dependency setting up), How can I install Parsoid on CentOS 6.3 without internet connection. 147.6.1.21 (talk) 05:46, 21 November 2017 (UTC)Reply

If you check out code from the https://github.com/wikimedia/mediawiki-services-parsoid-deploy/ repository, it comes with npm modules bundled with it and the parsoid code is in the src/ submodule. So, you can then set up your centos config to work with that or you can repackage the contents of it however you desire for your setup. Right now, we don't have any binary dependencies in there. SSastry (WMF) (talk) 14:51, 21 November 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Bad Choice of License

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


The choice of license for the Parser is really really really bad.

Using the GPL for JavaScript ensures the Script CANNOT legally be legally run by InternetExplorer/Edge, and Chrome/Chromium or Firefox.

Running this script, even in an BSD/LGPL v8/WebKit is still illegal, since LGPL + GPL must be licensed under GPL.

Since JavaScript is run & JIT-compiled in the browser, this constitutes "linking", which makes it illegal.

Since there is no (working) browser under the GPL (to my knowledge), you even cannot legally use this software at wikipedia.

Please change the license to LGPL, at least.

Also, making the license GPL ensures it cannot be used by any project that does not go under the GPL - such as Apache/MIT/BSD license. 185.13.106.194 (talk) 17:29, 21 November 2017 (UTC)Reply

I'm not going to comment on the rest of the legal theory here, since we can disqualify it from the start: Parsoid is run under node.js, not a browser. cscott (talk) 18:03, 21 November 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Which Repository for Parosid Install on Ubuntu 16.04.3 LTS

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Ubuntu 16.04.03 LTS

Codename: xenial

I would like to install parsoid but wonder if there is a repository with binaries that will work on this version of Ubuntu.

I'm completely unfamiliar with Ubuntu and Debian.

Some pointers will help. Thanks. RacletteChaes (talk) 23:31, 27 November 2017 (UTC)Reply

The setup instructions here should work, https://www.mediawiki.org/wiki/Parsoid/Setup#Ubuntu_/_Debian Arlolra (talk) 04:23, 28 November 2017 (UTC)Reply
Thanks... I'll try that. RacletteChaes (talk) 13:12, 30 November 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid with AuthRemoteuser (private wiki)

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


We have Kerberos enabled for apache which provides for every page the user. However as parsoid was not providing these credentials when connecting to http://localhost/wiki/api.php , the create/edit would fail.

We thought solving it by excluding the specific url http://localhost/wiki/api.php from authentication. However we now have the strange problem that when browsing to a page, the user is clearly logged in in the upper right corner, however when he clicks on edit, the visual editor complains about the user being 'anonymous' and consequently in the history only the ip address is logged instead of the username.

I have no clear understanding how parsoid provides the username to the api.php endpoint. What could be the issue here? 2A02:A03F:48B8:BA00:FCD4:94B6:A36D:4719 (talk) 18:22, 2 December 2017 (UTC)Reply

It sounds like what's happening is that by excluding the MediaWiki API from authentication, VE isn't sending credentials when saving.
You should probably revert that change and instead always allow read permissions from localhost, as in https://www.mediawiki.org/wiki/User:Andru~mediawikiwiki/Allow_Parsoid_Server
Also see, https://www.mediawiki.org/wiki/Extension:VisualEditor#Forwarding_Cookies_to_Parsoid Arlolra (talk) 18:48, 2 December 2017 (UTC)Reply
Thanks for your answer.
I tried both links.
If I enable authentication in apache for http://localhost/wiki/api.php, then parsoid always gives :
"401 Unauthorized This server could not verify that you\nare authorized to access the document\nrequested.  Either you supplied the wrong\ncredentials (e.g., bad password), or your\nbrowser doesn't understand how to supply\nthe credentials required"
If I disable authentication in apache, parsoid "works" but the user is still 'anonymous' Mishter Jingles (talk) 13:30, 4 December 2017 (UTC)Reply
After enabling authentication, you'd need to forward cookies. Did you try that? Arlolra (talk) 23:53, 18 December 2017 (UTC)Reply
Mszicsu (talk) 15:18, 14 March 2018 (UTC)Reply
Hello!
Same configuration as Mishter Jingles
After enabling authentication, you'd need to forward cookies. Did you try that? - Yup!
Still ip address instead of the username while edit any page.
Apache:
<Location /mediawiki/api.php>
        Satisfy Any
</Location>
LocalSettings.php:
...
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = true;
...
PS:
Also tried with $wgSessionsInObjectCache = true; and $wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] = true;
Parsoid and mediawiki hosted on same server.
PSS:
Next configuration doesn't work (read permissions error):
LocalSettings.php:
...
$wgGroupPermissions['*']['read'] = false;
$wgGroupPermissions['*']['edit'] = false;
...
if ( !isset( $_SERVER['REMOTE_ADDR'] ) OR $_SERVER['REMOTE_ADDR'] == '127.0.0.1' ) {
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = true;
}
#NetworkAuth
require_once "$IP/extensions/NetworkAuth/NetworkAuth.php";
$wgNetworkAuthUsers[] = [
        'iprange' => [ '127.0.0.1' ],
        'user'    => 'parsoid'
]; Starws (talk) 06:03, 12 July 2019 (UTC)Reply
Please see the documentation at https://www.mediawiki.org/wiki/Extension:VisualEditor#Linking_with_Parsoid_in_private_wikis Arlolra (talk) 16:59, 17 July 2019 (UTC)Reply
Thanks all above for the help, I just wanted to chime in myself because this page was in top google results while troubleshooting.
I was setting up a similar config, for myself (just a intranet wiki using apache basic http auth to restrict a "open" wiki.)
I was struggling but eventually realized that
1. my apache needed to be configured as:
Apache:
<Location /mediawiki/api.php>
        Satisfy Any
</Location>
and
2.(as Arlolra mentioned) I needed to forward cookies.

Meowoclock (talk) 03:10, 19 September 2019 (UTC)Reply
Wow, finally! This post resolved my problem. Turns out I somehow missed to add $wgGroupPermissions to LocalSettings.php file. Not sure how I could miss this step in the manual. Now I finally can start adding my client-documentation in my private mediawiki.
I have battled this problem for a week! XD Thanks 176.10.190.25 (talk) 07:48, 6 March 2020 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Dynamic Config

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Is it possible to have a truly dynamic config?

I'd like to be able to set up something like where dynamicdomain can be an arbitrary string:

parsoidConfig.setMwApi({ uri: 'http://yoursite.com/'+dynamicdomain+'/api.php', domain: dynamicdomain });

The use case is that I'd like for Parsoid to begin working on a new wiki/domain when one is added without manually updating the config, restarting/reloading, etc. 69.10.19.250 (talk) 19:19, 18 December 2017 (UTC)Reply

You can use localsettings.js for non-static configs,
See https://github.com/wikimedia/parsoid/blob/master/localsettings.example.js
However, support for updating the config w/o restarting isn't yet supported.
See https://phabricator.wikimedia.org/T100841 for that. Arlolra (talk) 20:15, 18 December 2017 (UTC)Reply
I'm already using localsettings.js... but I may just hack the code to bypass the config lookup and always return a URL in the form of 'http://yoursite.com/'+requestdomain+'/api.php'
Any pointers on where to start with that? 69.10.19.250 (talk) 21:35, 18 December 2017 (UTC)Reply
getParserEnv and switchToConfig are probably good places to look. Arlolra (talk) 23:50, 18 December 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.

Parsoid Install Error: Depends: nodejs (>= 4.0.0) [Node.js v8.9.3 all ready installed]

[edit]

The following discussion is closed. Please do not modify it. Subsequent comments should be made on the appropriate discussion page. No further edits should be made to this discussion.


Hello,

I am getting an error when I try and install Parsoid for the Extension:VisualEdiotor on MediaWiki in a "Debian GNU/Linux 8 \n \l" Docker container.

I know this issue has been reported elsewhere, like on this Talk:Parasoid page, but my situation is slightly different.

My set-up -

Computer - Mac Pro, 3.5 GHz 6-Core Intel Xeon E5, 16 GB 1866 MHz DDR RAM, Mac OS High Sierra 10.13.2 (17C88).

Docker - v17.09.1-ce-mac42

Docker images used - MediaWiki: https://hub.docker.com/_/mediawiki/ & MariaDB: https://hub.docker.com/_/mariadb/

After spinning up the Docker container for MariaDB, i linked it to the MediaWiki container doing —

$ docker run -it --name docker-mediawiki-node --link mediawiki-mariadb:mysql -p 9000:80 -d mediawiki

...That all works fine and I'm able to go in and complete the MediaWiki installation and connection to the MariaDB, I get the downloaded, completed  LocalSettings.php, which I copy up to the correct directory on my Docker container, that all runs fine and my Docker Test MediaWiki for a client works fine.

I then started following the instructions for the installation of the Extension:VisualEditor here. That all went fine as far as downloading the Extension, adding it to the right place in my Docker container, and editing the   LocalSettings.php which went fine. The problem started the Parsoid install, linked to from that Extension:Visual Editor page.

I got to the step where I did in my MediaWiki Docker container command line —

$ apt-get install parsoid
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:
    
    The following packages have unmet dependencies:
     parsoid : Depends: nodejs (>= 4.0.0) but it is not going to be installed
    E: Unable to correct problems, you have held broken packages.

Now as I've said above, I'm aware of others who have run into this error and their solutions are to install Node.js using apt-get.

The things is: I already had installed Node.js using the binaries from from the Node.JS site. I installed it successfully using these instructions here, prior to installing Extension:VisualEditor and attempting to install Parsoid.

I prefer this method because: a) I already know how to quickly install Node.js on Linux systems quickly; b) the apt-get install of Node.js installs it as $ nodejs, which as a long time Node.js coder, I simply hate. Yes, I all ready know you can fake out the system to have it "appear" as $ node from the command line, but I prefer to have it the way Node.js intended it from the get-go.

My Node.js is seen fine and works in the Docker container Debian Linux system just fine —

$ node -v
   v8.9.3
   $ npm version
   { npm: '5.6.0',
     ares: '1.10.1-DEV',
     cldr: '31.0.1',
     http_parser: '2.7.0',
     icu: '59.1',
     modules: '57',
     nghttp2: '1.25.0',
     node: '8.9.3',
     openssl: '1.0.2n',
     tz: '2017b',
     unicode: '9.0',
     uv: '1.15.0',
     v8: '6.1.534.48',
     zlib: '1.2.11' }

...as you can see. I'm running Node.js v8.9.3, the current long term supported version, which is a far greater version of then the Depends: nodejs (>= 4.0.0) that the apt-get installer for Parsoid says it requires. So I'm wondering then, why can't my Parsoid install via apt-get and why doesn't it see that Node.js is all ready installed?

Any help here with this issue would be greatly appreciated. Thank you in advance to anyone who responds with hep.

best,

— faddah portland, oregon, u.s.a. Faddahwolf (talk) 03:30, 22 December 2017 (UTC)Reply

The issue is with your package manager (apt), not Parsoid per se. Maybe try,
apt-get install --nodeps parsoid Arlolra (talk) 04:32, 22 December 2017 (UTC)Reply
Thank you, Arlolra, for responding and giving it a go. However, that didn't do it.
I tried both of these, and here was the result —
$ apt-get install --nodeps gcc</code> E: Command line option --nodeps is not understood
and...
$ apt-get install --nodejs gcc</code> E: Command line option --nodejs is not understood
So neither one of those worked. is there another version of this with install i'm supposed to use? Please advise. And thank you again for the help.
best,
— faddah
porltand, oregon, u.s.a. Faddahwolf (talk) 06:37, 22 December 2017 (UTC)Reply
Alrighty, try,
apt-get download parsoid
dpkg -i --ignore-depends=nodejs parsoid.deb Arlolra (talk) 14:41, 22 December 2017 (UTC)Reply
Hi Arlolra,
I do appreciate your continued attempts at assistance.
I am afraid, how ever, there is no `-i` option switch for `apt-get`. When I attempt to run that at the command line, I get in Debian 8 bash —
$ apt-get download parsoid dpkg -i --ignore-depends=nodejs parsoid.deb </code> E: Command line option 'i' [from -i] is not known.
Here is the `man` page print out of `apt-get download --help` —
$ apt-get download --help</code> apt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19 Usage: apt-get [options] command apt-get [options] install|remove pkg1 [pkg2 ...] apt-get [options] source pkg1 [pkg2 ...] apt-get is a simple command line interface for downloading and installing packages. The most frequently used commands are update and install. Commands: update - Retrieve new lists of packages upgrade - Perform an upgrade install - Install new packages (pkg is libc6 not libc6.deb) remove - Remove packages autoremove - Remove automatically all unused packages purge - Remove packages and config files source - Download source archives build-dep - Configure build-dependencies for source packages dist-upgrade - Distribution upgrade, see apt-get(8) dselect-upgrade - Follow dselect selections clean - Erase downloaded archive files autoclean - Erase old downloaded archive files check - Verify that there are no broken dependencies changelog - Download and display the changelog for the given package download - Download the binary package into the current directory Options: -h This help text. -q Loggable output - no progress indicator -qq No output except for errors -d Download only - do NOT install or unpack archives -s No-act. Perform ordering simulation -y Assume Yes to all queries and do not prompt -f Attempt to correct a system with broken dependencies in place -m Attempt to continue if archives are unlocatable -u Show a list of upgraded packages as well -b Build the source package after fetching it -V Show verbose version numbers -c=? Read this configuration file -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp See the apt-get(8), sources.list(5) and apt.conf(5) manual pages for more information and options. This APT has Super Cow Powers.
...so which option switch were you trying to use? Thank you again for helping out.
best,
— faddah
portland, oregon, u.s.a. Faddahwolf (talk) 19:49, 22 December 2017 (UTC)Reply
Sorry, that was a formatting error. It should have been two separate commands.
apt-get download parsoid
dpkg -i --ignore-depends=nodejs parsoid.deb Arlolra (talk) 23:19, 22 December 2017 (UTC)Reply
Hi again, Arloira,
That did it! Thank you for sticking with me and giving me help all the way through this.
Actually, I found as I was installing each package, that they all had dependencies that needed installing prior to installing the others. With each, because of these reoccurring dependency errors, I had to do the —
$ apt-get install init-system-helpers
...and then —
$ dpkg -i --ignore-depends=nodejs init-system-helpers_1.22_all.deb
...to get the installs to work. The dependency packages needed to be installed this way in this particular order —
  1. init-system-helpers
  2. cron
  3. libpopt0
  4. logroatate
  5. parsoid
But in any case, it's all installed now and I can go on with the rest of Node.JS and the Extension:VideoEditor install. Thank you for the patient hand-holding of me through all this. Now I know what it takes.
A couple things — it would seem to me that this parsoid deb package has two main problems —
  1. It has four packages whose dependencies must be installed first to the package, so it would be much better if these dependencies were checked on install, and, if any are not there, then are installed, in this particular order —
    1. init-system-helpers
    2. cron
    3. libpopt0
    4. logroatate
  2. The nodejs dependency issues is happening because this package is only looking for the Node.js when it is installed via the Debian/Ubuntu apt-get *.deb package process, which, because of a conflict with another Debian Linux app all ready called "node," installs it as `nodejs` on linux systems, which is non-standard, and frankly, annoying to JavaScript/Node.js programmers. The dependency check should look to see if it was installed using `apt-get` or also the standard ways from the nodejs.org site — by a linux binary package or compiled from source. It should be checking for either install, whether it produces a binary that is `nodejs` or `node`. this can be done with a simple `if` statement with an OR, as such —
if [ "$which nodejs" || "$which node" ]; then</code> # code to install parsoid ... ... fi
...or something like that.
I know from your profile that you work on the Parsoid part of the WikiMedia project. Is there some place here I can go to file bug report/feature requests on these issues with Parsoid/MediaWiki project? Please let me know and I'll be glad to put this info there and hopefully get this package updated soon so it doesn't generate support questions like this too much.
Please let me know on the above issues for this `apt-get` package for Parsoid. And thank you very much again for all the help.
best,
— faddah
portland, oregon, u.s.a. Faddahwolf (talk) 02:57, 23 December 2017 (UTC)Reply
We generally use https://phabricator.wikimedia.org/ for issue tracking. There's a Parsoid tag when creating tasks. Glad it's working for you. Arlolra (talk) 21:14, 23 December 2017 (UTC)Reply
The discussion above is closed. Please do not modify it. No further edits should be made to this discussion.