У меня есть сервер Node Express, который работает на localhost.Он использует 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");
})
})
Это работает локально.
Сейчас я пытаюсь развернуть его на облачной платформе Google с помощью App Engine.
Однако, когда я захожу на сайт, на котором я размещаюсь, и запускаю этот запрос 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.json
или app.yaml
, чтобы включить исполняемый файл?
РЕДАКТИРОВАТЬ: Может ли быть так, что движок приложения работает на Linux, а мой исполняемый файл для Windows?