use*_*305 5 c++ heroku node.js express buildpack
这是我的第一个SE问题.通常我可以通过这个伟大的网站轻松找到答案,但遗憾的是,在这个场合,我找不到任何关于我在寻找的东西,无论是在这里还是其他地方.让我解释一下这个问题:
我编写了一个C++程序来进行一些数值计算.它需要命令行参数并写入stdout,并在运行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
}
}
Run Code Online (Sandbox Code Playgroud)
上面的工作完全在我的本地机器上但是当我将它部署到Heroku然后尝试输入(这里我试过2131)我得到一个错误:
Error: Command failed: ./numericcomp 2131 ./numericcomp: 3: ./numericcomp: Syntax error: word unexpected (expecting ")")
Run Code Online (Sandbox Code Playgroud)
这是exec中的回调.
所以我真的不知道该怎么做,问题是Heroku只是没有正确运行可执行文件.关于Heroku如何工作,我并不是特别了解,我已经阅读了有关buildpacks等的信息,但是执行二进制文件似乎是一个非常复杂的过程.是因为我只有一个dyno并且无法运行子进程吗?
如果有人能指出我正确的方向,我会非常感激,似乎我已经完成了所有艰苦的工作,但无法克服最后的障碍.
use*_*305 16
好吧,我已经让它工作了,这可能是很多人感兴趣所以我会发布我是如何做到的.
问题是Heroku的架构与我的机器上的架构不同,因此编译的程序根本无法在Heroku上运行.为了解决这个问题,我创建了一个makefile来编译C++源代码并将其推送到Heroku使用
$ git push heroku master
Run Code Online (Sandbox Code Playgroud)
然后
$ heroku run bash
Run Code Online (Sandbox Code Playgroud)
它本质上设置了一个bash shell,可以访问你的Heroku实例.
从这里开始,使用编译可执行文件
$ make
Run Code Online (Sandbox Code Playgroud)
然后scp将此可执行文件返回到本地计算机然后
$ git add .
$ git commit -m "added working executable"
Run Code Online (Sandbox Code Playgroud)
和
$ git push heroku master
Run Code Online (Sandbox Code Playgroud)
然后工作的可执行文件将在Heroku应用程序上,并将像在本地主机上一样运行.
| 归档时间: |
|
| 查看次数: |
3049 次 |
| 最近记录: |