这是我的第一个SE问题。通常我可以通过这个伟大的网站轻松找到任何答案,但不幸的是,在这种情况下,我无法在这里或其他地方找到我想要的东西。让我解释一下这个问题:
我编写了一个C ++程序来进行一些数值计算。它需要命令行参数并写入stdout,并在运行OSX的系统上正常工作。
我希望在线托管这个版本,让我的同行更轻松地尝试一下,所以我编写了一些Node.js和Express代码来从表单中获取输入并将其作为命令行参数提供给可执行文件。然后我执行名为&factor;' factoriser'通过以下方式:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode != Activity.RESULT_OK)
return;
Bitmap bitmap = null;
String path = "";
if(requestCode == FILE_REQUEST){
imageCaptureUri = data.getData();
path = getRealPathFromURI(imageCaptureUri);
if(path != null){
bitmap = BitmapFactory.decodeFile(path);
}else{
path = imageCaptureUri.getPath();
}
}else {
path = imageCaptureUri.getPath();
bitmap = BitmapFactory.decodeFile(path);
}
img_logo.setImageBitmap(bitmap);
txt_image_path.setText(path);
}
以上在我的本地机器上完美运行但是当我将它部署到Heroku然后尝试输入(这里我试过2131)我得到一个错误:
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
}
}
赋予exec中的回调。
所以我真的不知道该怎么做,问题是Heroku只是没有正确运行可执行文件。关于Heroku如何工作,我并不是特别了解,我已经阅读了有关buildpacks等的信息,但是执行二进制文件似乎是一个非常复杂的过程。是因为我只有一个dyno并且它不能运行子进程吗?
如果有人能指出我在这方面的正确方向,我会非常感激,似乎我已经完成了所有艰苦的工作,但无法克服最后的障碍。
答案 0 :(得分:15)
好的,我已经让它工作了,这可能是很多人感兴趣所以我会发布我是怎么做的。
问题在于Heroku的架构与我的机器上的架构不同,因此编译的程序根本无法在Heroku上运行。为了解决这个问题,我创建了一个makefile来编译C ++源代码并使用
将其推送到Herokumodule.exports = {
myThing: {
getMyThing: function () {
return "This is my thing";
},
getMyObject: function () {
return {
a: 1,
b: "my object"
}
}
}
}
然后
$ git push heroku master
基本上设置了一个bash shell,可以访问你的Heroku实例。
从这里开始,使用
编译可执行文件$ heroku run bash
然后$ make
将此可执行文件返回到本地计算机,然后
scp
和
$ git add .
$ git commit -m "added working executable"
然后,工作的可执行文件将存在于Heroku应用程序中,并且将像在本地主机上一样运行。