[英]Calling executable from nodejs app on Heroku results in “Permission Denied” but running from bash is ok. Why?
我們在Heroku上有一個nodejs應用。 在代碼中的某個地方我們運行
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]}']);
但是,如果這樣做,即使可執行文件是chmod 0777,我們也會獲得Permission denied
。如果我從Heroku bash運行wkhtmltopdf命令,它就可以正常工作。 就在我們從節點內部運行它時,我們得到Permission Denied
。
而且,如果我們fs.readFileSync()
節點內部進行fs.readFileSync()
甚至fs.unlinkSync()
,我們就不會遇到任何問題。 可以讀取,寫入,刪除文件等。
有人有指針嗎?
所以我找到了問題。 實際上,這很愚蠢。 我們正在用heroku run bash
來執行chmod
,我認為這會在實際運行的Web dyno上運行bash。
但是,事實證明,運行heroku run bash
會啟動帶有文件系統等副本的一次性dyno。因此,當我執行chmod並檢查節點是否可以讀取,刪除等時,我確實可以,但是是一次性系統 ,而不是運行中的Web dyno。
在一次性dyno上進行更改時,實際上在Web dyno上沒有任何更改,因此,出現了相同的Permission Denied錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.