使用child_procees.exec firebase函数时权限被拒绝

时间:2018-04-21 20:00:24

标签: node.js firebase google-cloud-functions

我尝试使用nodejs native child_procees.exec()尝试在我的firebase函数中执行cpdf的二进制文件。在本地测试中工作正常,但是当我部署我的函数时,我收到此错误日志:

Error: Command failed: /user_code/cpdf -pages file.pdf
/bin/sh: 1: /user_code/cpdf: Permission denied

有办法给予权限吗? 这是我的代码:

const exec = require('child_process').exec
var executablePath = path.join(__dirname,'/cpdf')//<-my binary file compiled for linux 32 bits
var filePathIn = path.join(os.tmpdir(),'/file.pdf')
exec(`${executablePath} ${filePathIn} -pages`, 
function(error, stdout, stderr) {
    if (error !== null){
         console.log('error',error)
    }else{
         console.log('ok',stdout)
    }
})

提前谢谢

2 个答案:

答案 0 :(得分:0)

您需要读取和可执行权限

sudo chmod 755 /user_code/cpdf

sudo chmod -RX /user_code/cpdf

答案 1 :(得分:0)

最后,我找到了解决方案。事实是node_modules文件夹具有执行权限,因此我在我的package.json中添加了node-cpdf的npm repo,其中包含必要的二进制文件,然后使用它的路由到可执行文件。这是我的代码更新:

const exec = require('child_process').exec
var executablePath = path.join(__dirname,'node_modules/cpdf-n/bin/cpdf-linux-64')
var filePathIn = path.join(os.tmpdir(),'/file.pdf')
exec(`${executablePath} -pages ${filePathIn}`, 
function(error, stdout, stderr) {
    if (error !== null){
         console.log('error',error)
    }else{
         console.log('ok',stdout)
    }
})