Heroku H12 Ошибка тайм-аута запроса на экспресс-маршруте, выполняющем скрипт Python - PullRequest
0 голосов
/ 30 апреля 2018

Я столкнулся с этой серьезной проблемой в приложении Heroku: у меня настроен экспресс-маршрут следующим образом:

app.get('/recommendations/:data', (req, res) => {

let dataSplit = req.params.data.split("");
let dataInt = [];
dataSplit.forEach(char => dataInt.push(parseInt(char)));
function sendPrediction(dataInf) {
const process = spawn('python', ["./predict.py", dataInt]);
process.stdout.on('data', (data) => {
  let jSonned = JSON.stringify(data.toString('utf-8'));
  let chopped = jSonned.slice(1, jSonned.length - 3);
  res.send(chopped.split(','));
});
}
sendPrediction(dataInt);
});

Когда я выполняю запрос GET на этот маршрут от компонента внешнего интерфейса, он завершается с ошибкой H12 через 30 секунд в соответствии с поведением Heroku по умолчанию. Поскольку этот маршрут отлично работает на моем локальном хосте, это заставляет меня поверить, что с зависимостями Python что-то не так, поскольку я могу повторить то же поведение на локальном хосте, отключив свой virtualenv. Я знаю, что это не так уж много, но если кто-то видел что-то подобное и может помочь, я очень ценю это. Как я могу выяснить, где проблема?

Вот ошибка из логов Heroku:

2018-04-30T17:17:27.175201+00:00 heroku[router]: at=error code=H12 
desc="Request timeout" method=GET path="/recommendations/41231" host=what- 
doxd.herokuapp.com request_id=2249d6ac-a389-40c1-8f64-8947796494a7 
fwd="12.23.56.98" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 
protocol=https

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Проблема решена: мне нужно было указать Python 2 и не позволить герою по умолчанию использовать python 3

0 голосов
/ 30 апреля 2018

Прежде всего, вы должны приложить свои логи герою к вопросу, чтобы мы могли видеть, на что жалуется Героку.

В отсутствие логов Heroku, я предполагаю, что у вас может не быть python buildpack , определенного для вашего приложения. Так как ваш веб-dyno построен с использованием node / express, у вас, вероятно, уже есть buildpack-пакет node.js (который Heroku может добавить в ваше приложение автоматически для вас, если вы не добавили его явно).

В этом случае вам нужно добавить пакет сборки Python. В противном случае Python не включается в slug вашего приложения.

См. здесь для получения инструкций по добавлению еще одного buildpack-пакета в ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...