簡體   English   中英

從Heroku上的nodejs應用程序調用可執行文件會導致“權限被拒絕”,但可以從bash運行。 為什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM