2016-09-25 13 views
5

Đây là câu hỏi SE đầu tiên của tôi. Thông thường tôi có thể tìm thấy câu trả lời cho bất cứ điều gì khá dễ dàng thông qua trang web tuyệt vời này, nhưng tiếc là trong dịp này tôi không thể tìm thấy bất cứ điều gì về những gì tôi đang tìm kiếm, hoặc ở đây hoặc ở nơi khác. Hãy để tôi giải thích vấn đề:Cách chạy tệp thi hành trên Heroku từ nút, hoạt động cục bộ

Tôi đã viết chương trình C++ để thực hiện một số phép tính số. Nó lấy các đối số dòng lệnh và ghi vào stdout và hoạt động tốt trên hệ điều hành OSX của tôi.

Tôi muốn lưu trữ trực tuyến này để các đồng nghiệp của mình thử nó dễ dàng hơn, và vì vậy tôi đã viết một số mã Node.js và Express để lấy đầu vào từ biểu mẫu và cung cấp cho nó như một đối số dòng lệnh để thực thi. sau đó tôi thực hiện nhị phân gọi là 'factoriser' theo cách sau:

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 
    } 
} 

Các công trình trên một cách hoàn hảo trên máy tính địa phương của tôi nhưng khi tôi triển khai nó đến Heroku và sau đó thử một đầu vào (ở đây tôi đã cố gắng 2131) tôi nhận được một lỗi của:

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

được trao cho cuộc gọi lại trong exec.

Vì vậy, tôi thực sự không biết phải làm gì, vấn đề là Heroku chỉ không chạy tệp thực thi đúng cách. Tôi không đặc biệt am hiểu về cách thức hoạt động của Heroku, tôi đã đọc qua thông tin về buildpacks vv nhưng có vẻ như một quá trình rất phức tạp chỉ để thực thi một nhị phân. Có phải vì tôi chỉ có một dyno và nó không thể chạy quá trình con?

Tôi sẽ rất biết ơn nếu ai đó có thể chỉ cho tôi đúng hướng ở đây, có vẻ như tôi đã làm tất cả công việc khó khăn nhưng không thể vượt qua trở ngại cuối cùng.

Trả lời

9

Ok, tôi đã có nó để làm việc, điều này có thể được quan tâm đến nhiều vì vậy tôi sẽ đăng bài như thế nào tôi đã làm nó.

Vấn đề là kiến ​​trúc của Heroku không giống như trên máy tính của tôi và do đó chương trình được biên dịch đơn giản sẽ không chạy trên Heroku. Để làm được việc này tôi đã tạo ra một makefile để biên dịch mã nguồn C++ và đẩy này để Heroku sử dụng

$ git push heroku master 

Sau đó

$ heroku run bash 

trong đó chủ yếu thiết lập một vỏ bash với quyền truy cập vào dụ Heroku của bạn.

Từ đây, biên dịch thực thi sử dụng

$ make 

Sau đó scp thực thi này trở lại máy tính cục bộ của bạn và sau đó

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

$ git push heroku master 

Sau đó thực thi công việc sẽ được có trên ứng dụng Heroku và sẽ chạy giống như trên máy chủ lưu trữ cục bộ.

Các vấn đề liên quan