2016-09-25 7 views
5

यह मेरा पहला एसई प्रश्न है। आम तौर पर मैं इस महान वेबसाइट के माध्यम से काफी आसानी से कुछ भी जवाब पा सकता हूं, लेकिन दुर्भाग्यवश इस अवसर पर मुझे यहां या कहीं और, जो कुछ भी मैं ढूंढ रहा हूं, उस पर कुछ भी नहीं मिला। मुझे समस्या की व्याख्या करने दें:नोडोक से नोडोकू पर निष्पादन योग्य कैसे चलाएं, स्थानीय रूप से

मैंने कुछ संख्यात्मक गणना करने के लिए एक सी ++ प्रोग्राम लिखा है। यह कमांड लाइन तर्क लेता है और stdout को लिखता है और ओएसएक्स चलाने वाले मेरे सिस्टम पर ठीक काम करता है।

मैं अपने साथियों को अधिक आसानी से आज़माने के लिए यह ऑनलाइन होस्ट करना चाहता हूं, और इसलिए मैंने कुछ नोड.जेएस और एक्सप्रेस कोड को एक फॉर्म से इनपुट लेने के लिए लिखा और निष्पादन योग्य को कमांड लाइन तर्क के रूप में दिया। अपने स्थानीय मशीन पर

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) मैं एक मिलता है: मैं तो निम्नलिखित तरीके से बाइनरी 'factoriser' कहा जाता है पर अमल की त्रुटि:

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

जो निष्पादन में कॉलबैक को दिया जाता है।

तो मुझे वास्तव में नहीं पता कि क्या करना है, मुद्दा यह है कि हेरोोकू ठीक से निष्पादन योग्य नहीं चल रहा है। मैं विशेष रूप से जानबूझकर नहीं जानता कि हेरोोकू कैसे काम करता है, मैंने बिल्डपैक इत्यादि पर जानकारी पढ़ी है, लेकिन यह बाइनरी निष्पादित करने के लिए एक बहुत ही जटिल प्रक्रिया प्रतीत होती है। क्या ऐसा इसलिए है क्योंकि मेरे पास केवल एक डिनो है और यह बाल प्रक्रिया को नहीं चला सकता है?

अगर कोई मुझे सही दिशा में इंगित कर सकता है तो मैं बहुत आभारी हूं, ऐसा लगता है कि मैंने कड़ी मेहनत की है लेकिन अंतिम बाधा नहीं मिल सकती है।

उत्तर

9

ठीक है, मुझे यह काम करने के लिए मिला है, यह कई लोगों के लिए ब्याज हो सकता है इसलिए मैं पोस्ट करूंगा कि मैंने यह कैसे किया।

समस्या यह थी कि हेरोकू का आर्किटेक्चर मेरी मशीन पर उतना ही नहीं है और इसलिए संकलित प्रोग्राम बस हेरोोक पर नहीं चलता है। इस के आसपास पाने के लिए मैं सी ++ स्रोत कोड को संकलित करने के एक makefile बनाया है और

$ git push heroku master 

का उपयोग कर Heroku को यह धक्का दिया तो

$ heroku run bash 

जो अनिवार्य रूप से अपने Heroku उदाहरण के लिए उपयोग के साथ एक पार्टी खोल सेट करता है।

यहाँ से, निष्पादन योग्य

$ make 

फिर scp इस निष्पादन योग्य वापस अपने स्थानीय मशीन के लिए और फिर

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

और

$ git push heroku master 

फिर काम करने के लिए निष्पादन योग्य हो जाएगा का उपयोग कर संकलन वहां Heroku ऐप पर और स्थानीय मेजबान की तरह भाग जाएगा।

संबंधित मुद्दे