首页 > 解决方案 > Node js Google App Engine 中的 child_process

问题描述

我有一个在 localhost 上运行的 Node Express 服务器。它用于child_process运行 C++ 独立可执行文件。

使用的代码child_process如下(应用程序创建output.txt):

app.post('/generate', async function(req, res)
{
    var input1 = req.body.input1;
    var input2 = req.body.input2;

    var execFile = require('child_process').execFile;

    var program = "path/to/executable";
    var args    = [input1, input2];

    var child = execFile(program, args,
        function (error, stdout, stderr){           
            console.log(error);
            console.log(stdout);
            console.log(stderr);

            const file = __dirname + "/output.txt"
            app.get('/output.txt', function (req, res) {
                res.sendFile(path.join(__dirname + '/output.txt'));
            });
            res.send("/output.txt");
        })
})

这在本地有效。

我现在正在尝试使用 App Engine 将其部署在 Google Cloud Platform 上。

但是,当我访问我托管的网站并启动此 POST/generate请求时,我没有得到预期的输出。在我的项目的 Google Cloud Platform 日志中,我可以看到以下错误:

 textPayload: "{ Error: spawn cpp/web_cpp_app/x64/Debug/web_cpp_app ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
    at onErrorNT (internal/child_process.js:415:16)
    at process._tickCallback (internal/process/next_tick.js:63:19)
" 

起初我不明白这个错误,但现在我可以看到,如果我在本地运行同一个项目,但将独立可执行文件的路径设置为无效路径,我会得到同样的错误。我猜当我部署时,我的可执行文件不知何故不包括在内?

我需要添加一些特定的东西package.jsonapp.yaml文件来包含可执行文件吗?

编辑: 可能是应用程序引擎在 Linux 上运行,而我的可执行文件适用于 Windows?

标签: node.jsexpressgoogle-cloud-platformchild-process

解决方案


你对操作系统是对的,根据这个Doc Appengine 标准,NodeJS 使用 Ubuntu 操作系统,灵活使用 Debian

关于我发现这篇文章的可执行兼容性


推荐阅读