Как запустить исполняемый файл на Heroku с узла, работает локально

Это мой первый вопрос по SE. Обычно я могу найти ответ на что-нибудь довольно легко через этот замечательный сайт, но, к сожалению, в этом случае я не могу найти ничего о том, что я ищу, ни здесь, ни где-либо еще. Позвольте мне объяснить проблему:

Я написал программу на C ++ для некоторых численных расчетов. Он принимает аргументы командной строки и пишет в стандартный вывод и прекрасно работает на моей системе под управлением OSX.

Я хочу разместить его в Интернете, чтобы мои коллеги могли его опробовать, поэтому я написал несколько кодов Node.js и Express, чтобы получить входные данные из формы и передать их в качестве аргумента командной строки исполняемому файлу. Затем я выполняю двоичный файл под названием «факторизатор» следующим образом:

const exec = require('child_process').exec;
app.post('/', function (req, res) {
var input = req.body.numberinput; //Number entered on the webpage

const child = exec('./numericcomp ' + input, {timeout: 20000}, function(error, stdout, stderr) {
//Code here writes stdout to the page
}
}

Вышеописанное прекрасно работает на моем локальном компьютере, но когда я развернул его в Heroku, а затем попытался ввести (здесь я попробовал 2131), я получаю ошибку:

Error: Command failed: ./numericcomp 2131 ./numericcomp: 3: ./numericcomp: Syntax error: word unexpected (expecting ")")

это дается для обратного вызова в exec.

Так что я действительно не знаю, что делать, проблема в том, что Heroku просто не запускает исполняемый файл должным образом. Я не особо разбираюсь в том, как работает Heroku, я прочитал информацию о buildpack-пакетах и ​​т. Д., Но, кажется, очень сложно просто выполнить двоичный файл. Это потому, что у меня есть только один dyno, и он не может запустить дочерний процесс?

Я был бы очень благодарен, если бы кто-то мог указать мне правильное направление здесь, кажется, что я сделал всю тяжелую работу, но не могу преодолеть последнее препятствие.

5

Решение

Хорошо, у меня это работает, это может заинтересовать многих, поэтому я опубликую, как я это сделал.

Проблема заключалась в том, что архитектура Heroku не такая, как на моей машине, и, следовательно, скомпилированная программа просто не будет работать на Heroku. Чтобы обойти это, я создал make-файл для компиляции исходного кода C ++ и отправил его в Heroku, используя

$ git push heroku master

затем

$ heroku run bash

который по сути устанавливает оболочку bash с доступом к вашему экземпляру Heroku.

Отсюда скомпилируйте исполняемый файл, используя

$ make

затем scp этот исполняемый файл обратно на локальный компьютер, а затем

$ git add .
$ git commit -m "added working executable"

а также

$ git push heroku master

Тогда рабочий исполняемый файл будет там в приложении Heroku и будет работать так же, как на локальном хосте.

13

Другие решения

Других решений пока нет …