2016-09-25 8 views
5

これは私の最初のSE質問です。通常、私はこの偉大なウェブサイトを通して何かへの答えをかなり簡単に見つけることができますが、残念なことにこの機会に私はここや他の場所で私が探しているものを見つけることができません。問題を説明しましょう:ノードから実行ファイルを実行する方法、ローカルで動作する

いくつかの数値計算を行うためのC++プログラムを作成しました。それは、コマンドライン引数を取るとstdoutに書き込みOSXを実行している私のシステムで正常に動作します。

私はこれをより簡単に試してみるためにオンラインでホストしたいので、フォームから入力を受け取り、コマンドライン引数として実行可能ファイルに渡すためにNode.jsとExpressコードを書きました。 (ここで私は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 
    } 
} 

私のローカルマシン上で完全に上記の作品が、私はHerokuのにデプロイしてから入力をしようとすると:私は、次のように「factoriser」と呼ばれるバイナリを実行しますエラー:

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

これはexecのコールバックに与えられます。

私は本当に何をすべきか分かりません。問題はHerokuが実行可能ファイルを正しく実行していないことです。私はHerokuの仕組みについてはあまり知られていません。ビルパックなどの情報を読んだことがありますが、バイナリを実行するだけでは非常に複雑な処理に見えます。私は1つのdynoしか持たず、子プロセスを実行できないためですか?

誰かがここで正しい方向に私を指すことができれば、私は非常に感謝されるが、私がすべてのハードワークを行っているが、最終的なハードルを乗り越えることができないようです。

答えて

9

私はそれを動作させるようにしました。これは多くの人にとって興味深いかもしれないので、私がどのようにしたのかを投稿します。

問題は、Herokuののアーキテクチャは、私のマシン上のものと同じではないということでしたので、コンパイルされたプログラムは、単にHerokuの上で実行されません。

$ heroku run bash 

その後、私は

$ git push heroku master 

を使用してC++ソースコードをコンパイルするメイクファイルを作成し、Herokuのにこれをプッシュこれを回避するには、基本的にあなたのHerokuのインスタンスにアクセスしてbashシェルを設定しています。ここから

、戻ってあなたのローカルマシンにこの実行可能scpその後

$ make 

を使用して実行可能ファイルをコンパイルし

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

$ git push heroku master 

その後の作業の実行が可能になりますそこにはHerokuアプリがあり、ローカルホストのように動作します。

関連する問題