我们在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]}']);
但是如果我们这样做,我们得到Permission denied
,即使可执行文件是chmod 0777.如果我从Heroku bash运行wkhtmltopdf命令,它运行正常。就在我们从节点内运行它时,我们得到Permission Denied
。
此外,如果我们只是在节点内fs.readFileSync()
甚至fs.unlinkSync()
,我们就不会遇到任何问题。该文件可以被读取,写入,删除等。
有人有指针吗?
答案 0 :(得分:0)
所以我发现了这个问题。实际上,这真是太愚蠢了。我们正在chmod
进行heroku run bash
,我认为会在实际运行的网络动态上运行bash。
然而,事实证明,运行heroku run bash
将使用文件系统等的副本启动一次性dyno。因此,当我执行chmod并检查节点是否可以读取,删除等,然后我确实可以,但那是在一次性系统上,而不是在正在运行的网络dyno上。
虽然在一次性dyno上进行chmodding,但在web dyno上没有任何实际改变,因此同样的Permission Denied错误不断出现。