2016-09-23 4 views
0

私たちは、Heroku上にnodejsアプリケーションを持っています。どこかのコードでは、私はHerokuのはbashからwkhtmltopdfコマンドを実行すると、実行可能ではchmod 0777.場合でも、我々はこのHerokuのnodejsアプリケーションから実行ファイルを呼び出すと、 "Permission Denied"が表示されますが、bashから実行するとOKです。どうして?

var spawn = require('child_process').spawn; 
var child = spawn('/bin/bash', ['-c', '/app/node_modules/wkhtmltopdf-prebuilt/bin/linux64/bin/wkhtmltopdf' + ' | cat ; exit ${PIPESTATUS[0]}']); 

を実行します。しかし、我々はそうするならば、我々はPermission deniedを取得し、それだけで正常に動作します。ノード内から実行すると、Permission Deniedとなります。

さらに、ノード内のノードがfs.readFileSync()、さらにfs.unlinkSync()の場合は、問題は発生しません。ファイルは読み込み、書き込み、削除することができます。

誰かがポインタを持っていますか?

+0

ノード内でファイルを読み込もうとしましたか?それが実行の問題か単なる読書の問題かどうか見てください。あなたのスクリプト(シバン)の最初の行は何ですか? –

+0

bashとnodejを同じユーザーとして実行していますか? nodejsが実行中であるため、そのファイルを読み書きする権限がない可能性があります。 – euphoria83

+0

@ Jean-FrançoisFabreファイルのオープン、書き込み、削除は問題ありません。答えを更新しました。また、私たちが使用する文字コードも更新しました。それはおそらく水の下で教科書のようなシバンを生み出すだろうか? –

答えて

0

だから問題が見つかりました。実際には、とても馬鹿です。私たちはheroku run bashからchmodを実行していました。私はと考えていました。は実際の実行中のWeb dynoでbashを実行します。

しかし、heroku run bashを実行すると、ファイルシステムのコピーなどで一回限りのdynoがスピンアップすることになります。したがって、chmodを実行してノードが読み込み、削除などができるかどうかを確認すると、しかし、実行中のWeb dynoではなく、が一度だけのシステムにありました。

一度オフのdynoでchmoddingしても、実際にはWeb dynoでは何も変更されていないため、同じPermission Deniedエラーが発生し続けました。

関連する問題