【问题标题】:Heroku H12 Request Timeout Error on Express route executing Python script执行 Python 脚本的 Express 路由上的 Heroku H12 请求超时错误
【发布时间】:2018-10-10 09:24:33
【问题描述】:

我在 Heroku 应用程序上遇到了这个主要问题:我设置了 Express 路由 如下:

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 请求时,根据 Heroku 的默认行为,它会在 30 秒后超时并出现 H12 错误。由于这条路线在我的本地主机上运行良好,它让我相信 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

【问题讨论】:

    标签: node.js express heroku scikit-learn axios


    【解决方案1】:

    首先,您应该将您的 heroku 日志附加到问题中,以便我们可以看到 Heroku 抱怨的内容。

    在没有 Heroku 日志的情况下,我猜您可能没有为您的应用定义 python buildpack。由于您的 web dyno 是使用 node/express 构建的,因此您可能已经有一个 node.js buildpack(如果您没有明确添加,Heroku 可能会为您提供 added to your app automatically)。

    在这种情况下,您需要添加一个 python buildpack。否则,python 不会包含在您应用的 slug 中。

    请参阅here,了解有关向您的应用添加另一个构建包的说明。

    【讨论】:

    • 我确实添加了一个 python buildpack,它似乎在我第一次推送到 heroku 时正确安装了 requirements.txt 的依赖项。现在将附加日志,抱歉。
    【解决方案2】:

    问题已解决:我需要指定 Python 2,而不是让 heroku 默认为 python 3

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 2012-07-08
      • 2020-01-26
      • 2012-08-19
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2020-07-09
      • 2021-12-07
      相关资源
      最近更新 更多