
私は SlimerJs をサーバー上のヘッドレス ブラウザーとして使用しています。サーバーには xserver がないため、xvfb を使用して実行しました。
コマンドは次のようになります:
xvfb-run --server-args="-screen 0, 1024x768x24" slimerjs-0.10.0pre/slimerjs \
script.js --debug=yes "/tmp/file986Iww" "/tmp/file28bAEv" "pdf"
ファイルは、script.js
入力用のファイル名、出力用のファイル名、および slimer のプリンタ機能を使用して変換する形式を受け取ります。
問題は、root として実行すると正常に動作するということです。しかし、Apache に作業をさせると失敗し、停止してしまいます。
Apache はwww-data
ユーザーとグループの下で実行されます。これは前のコマンドの出力です:
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 **
の66行目は次の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);
strace の何が問題なのか確認しようとすると、何らかのループに陥っていることがわかります...
このユーザーがこのバイナリを実行できない理由は見当たりません。
どの権限が不足しているか、または xulrunner で何が問題になっているかをデバッグするにはどうすればよいでしょうか?
strace は非常に重いため投稿しませんでしたが、関連する情報が含まれていると思われる場合は、遠慮なくリクエストしてください。
$ 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
答え1
取得しようとしているプロファイル ディレクトリにアクセスしたり、書き込んだりする権限がない可能性があります。
おそらく、プロファイルディレクトリ--profile /tmp/slimerjs.gRAJJar6
をSlimerJS ドキュメント-profile
これは(単一のダッシュ)であるべきであることを示します
デフォルトでは、プロファイル オプションを省略すると (二重ダッシュと単一ダッシュのどちらかが原因であると思われます)、「SlimerJS は起動するたびに一時プロファイルを作成します」。つまり、「$HOME/.innophi/slimerjs/」に新しいディレクトリを作成します。
これを として実行しようとしているためwww-data
、ホーム ディレクトリを確認し、SlimerJS のデフォルト ディレクトリ パスにファイルを作成してアクセスできることを確認するか、-profile
の代わりにを使用して--profile
、指定されたフォルダーにファイルを作成してアクセスできることを確認してください。