
Ich verwende SlimerJs als Headless-Browser auf einem Server. Da der Server keinen XServer hat, habe ich xvfb zum Ausführen verwendet.
Der Befehl lautet ungefähr so:
xvfb-run --server-args="-screen 0, 1024x768x24" slimerjs-0.10.0pre/slimerjs \
script.js --debug=yes "/tmp/file986Iww" "/tmp/file28bAEv" "pdf"
Die Datei script.js
benötigt einen Dateinamen für die Eingabe, einen Dateinamen für die Ausgabe und ein Format zur Konvertierung unter Verwendung der Druckerfunktion von Slimer.
Mein Problem ist, dass es einwandfrei funktioniert, wenn ich es als Root ausführe. Aber wenn ich Apache die Arbeit machen lasse, schlägt es fehl und bleibt hängen.
Apache läuft unter www-data
Benutzer und Gruppe. Dies ist die Ausgabe des vorherigen Befehls:
slimerjs-0.10.0pre/xulrunner/xulrunner -app slimerjs-0.10.0pre/application.ini --profile /tmp/slimerjs.gRAJJar6 -no-remote script.js --debug=yes /tmp/file986Iww /tmp/file28bAEv pdf
Xlib: extension "RANDR" missing on display ":99".
JavaScript warning: resource://slimerjs/slUtils.jsm, line 154: JavaScript 1.7's let blocks are deprecated
JavaScript error: jar:file:///var/www/project/slimerjs-0.10.0pre/xulrunner/omni.ja!/components/XULStore.js, line 66: NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]
** stuck forever here **
Die Zeile 66 lautet XULStore.js
:
65. Services.obs.addObserver(this, "profile-before-change", true);
66. this._storeFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
67. this._storeFile.append(STOREDB_FILENAME);
Beim Versuch herauszufinden, was mit strace nicht stimmt, zeigt es mir, dass es in einer Art Schleife feststeckt ...
Ich sehe keinen Grund, warum dieser Benutzer diese Binärdatei nicht ausführen kann.
Wie kann ich debuggen, welche Berechtigung fehlt oder was mit xulrunner schief läuft?
Ich habe den Strace nicht gepostet, weil er ziemlich groß ist. Fragen Sie ruhig danach, wenn Sie meinen, dass er relevante Informationen enthalten könnte.
$ uname -a
Linux *host* 3.10-0.bpo.2-amd64 #1 SMP Debian 3.10.5-1~bpo70+1 (2013-08-11) x86_64 GNU/Linux
Antwort1
Möglicherweise verfügen Sie nicht über die Berechtigung, auf das Profilverzeichnis, das Sie abrufen möchten, zuzugreifen oder darin zu schreiben.
Obwohl Sie (vermutlich) versuchen, das Profilverzeichnis über --profile /tmp/slimerjs.gRAJJar6
dasSlimerJS-Dokumentationgibt an, dass dies sein sollte -profile
(einzelner Strich)
Wenn Sie die Profiloption standardmäßig weglassen, was Sie anscheinend aufgrund des doppelten Bindestrichs im Vergleich zum einzelnen Bindestrich tun, dann „erstellt SlimerJS bei jedem Start ein temporäres Profil“, indem ein neues Verzeichnis in „$HOME/.innophi/slimerjs/“ erstellt wird.
Da Sie versuchen, dies als auszuführen, www-data
überprüfen Sie deren Home-Verzeichnis und vergewissern Sie sich, dass Sie Dateien im SlimerJS-Standardverzeichnispfad erstellen und darauf zugreifen können, oder verwenden Sie -profile
stattdessen --profile
und vergewissern Sie sich, dass Sie Dateien im angegebenen Ordner erstellen und darauf zugreifen können.