【问题标题】:How to run an executable on Heroku from node, works locally如何从节点在 Heroku 上运行可执行文件,在本地工作
【发布时间】:2017-02-02 18:33:22
【问题描述】:

这是我的第一个 SE 问题。通常我可以通过这个很棒的网站很容易地找到任何问题的答案,但不幸的是,在这种情况下,我找不到任何关于我正在寻找的东西,无论是在这里还是其他地方。让我解释一下问题:

我编写了一个 C++ 程序来进行一些数值计算。它接受命令行参数并写入标准输出,并在我运行 OSX 的系统上正常工作。

我想将它在线托管给我的同龄人以便更轻松地试用它,因此我编写了一些 Node.js 和 Express 代码来从表单中获取输入并将其作为命令行参数提供给可执行文件。然后我按以下方式执行名为“factoriser”的二进制文件:

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 的工作原理并不是特别了解,我已经阅读了有关 buildpacks 等的信息,但仅执行二进制文件似乎是一个非常复杂的过程。是不是因为我只有一个测功机,不能运行子进程?

如果有人能在这里为我指明正确的方向,我将不胜感激,看来我已经完成了所有艰苦的工作,但无法克服最后的障碍。

【问题讨论】:

    标签: c++ node.js express heroku buildpack


    【解决方案1】:

    好的,我已经开始工作了,这可能会引起很多人的兴趣,所以我将发布我是如何做到的。

    问题是 Heroku 的架构与我机器上的架构不同,因此编译后的程序根本无法在 Heroku 上运行。为了解决这个问题,我创建了一个 makefile 来编译 C++ 源代码并使用

    将其推送到 Heroku
    $ git push heroku master
    

    然后

    $ heroku run bash
    

    它本质上设置了一个可以访问您的 Heroku 实例的 bash shell。

    从这里开始,使用编译可执行文件

    $ make
    

    然后scp这个可执行文件回到你的本地机器,然后

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

    $ git push heroku master
    

    然后工作的可执行文件将在 Heroku 应用程序上,并且将像在本地主机上一样运行。

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2018-09-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      相关资源
      最近更新 更多