2016-09-25 30 views
5

這是我的第一個SE問題。通常我可以很容易地通過這個偉大的網站找到任何答案,但不幸的是,在這個場合我無法在這裏或其他地方找到任何關於我所尋找的東西。讓我解釋一下這個問題:如何在節點上運行Heroku上的可執行文件,在本地工作

我寫了一個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是如何工作的,我沒有特別的瞭解,我已經閱讀了關於構建包等的信息,但是執行二進制文件似乎是一個非常複雜的過程。是因爲我只有一個測功機,它不能運行子進程?

如果有人能在這裏指出我正確的方向,我將非常感激,似乎我已經完成了所有的努力工作,但無法克服最後的障礙。

回答

9

好吧,我已經得到它的工作,這可能是很多人感興趣,所以我會發布我是如何做到的。

問題在於Heroku的架構與我的機器不同,因此編譯的程序根本無法在Heroku上運行。爲了解決這個問題,我創建一個makefile編譯C++源代碼,並使用

$ git push heroku master 

推這Heroku的然後

$ heroku run bash 

基本上設置的是bash shell訪問您的Heroku的實例。

從這裏,編譯使用

$ make 

然後scp這個可執行回本地機器,然後

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

$ git push heroku master 

然後工作可執行文件將可執行文件那裏的Heroku應用程序,並將運行就像本地主機。

相關問題