【问题标题】:Flask app won't run on HerokuFlask 应用程序无法在 Heroku 上运行
【发布时间】:2014-01-12 19:50:14
【问题描述】:

当我从 Heroku 在本地运行它时,它运行良好。在日志中,我得到的错误是超时错误。

from flask import Flask, render_template, request
import requests
import json

app = Flask(__name__)

def decrementList(words):
    for w in [words] + [words[:-x] for x in range(1,len(words))]:
        url = 'http://ws.spotify.com/search/1/track.json?q='
        request = requests.get(url + "%20".join(w))

        json_dict = json.loads(request.content)
        track_title = ' '.join(w)

        for track in json_dict["tracks"]:
            if track["name"].lower() == track_title.lower() and track['href']:
                return "http://open.spotify.com/track/" + track["href"][14:], words[len(w):], track["href"][14:]

    return "Sorry, no (more) track matches found!", None, ""  

@app.route('/')
def home():
    message = request.args.get('q', '').split()
    first_arg = ' '.join(message)
    playlist = []
    results = []
    while message:
        href, new_list, for_playlist = decrementList(message)
        message = new_list
        results.append(href)

        playlist.append(for_playlist)

    playlist_link = ','.join(playlist)


    return render_template('home.html', first_arg=first_arg, results=results, playlist_link=playlist_link)

if __name__ == '__main__':
    app.run(debug=False)

我的 procfile 是这样说的:

web: python routes.py

以下是一些新的错误日志:

2014-01-14T02:47:38.042655+00:00 heroku[web.1]: Process exited with status 137
2014-01-14T02:47:41.346999+00:00 heroku[web.1]: Starting process with command `python routes.py`
2014-01-14T02:47:42.443673+00:00 app[web.1]: Traceback (most recent call last):
2014-01-14T02:47:42.443673+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/logging/__init__.py", line 851, in emit
2014-01-14T02:47:42.443673+00:00 app[web.1]:     msg = self.format(record)
2014-01-14T02:47:42.443673+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/logging/__init__.py", line 724, in format
2014-01-14T02:47:42.443673+00:00 app[web.1]:     return fmt.format(record)
2014-01-14T02:47:42.443673+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/logging/__init__.py", line 464, in format
2014-01-14T02:47:42.443673+00:00 app[web.1]:     record.message = record.getMessage()
2014-01-14T02:47:42.443673+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/logging/__init__.py", line 328, in getMessage
2014-01-14T02:47:42.443673+00:00 app[web.1]:     msg = msg % self.args
2014-01-14T02:47:42.443673+00:00 app[web.1]: TypeError: %d format: a number is required, not str
2014-01-14T02:47:42.444029+00:00 app[web.1]: Logged from file _internal.py, line 87

这些新日志似乎指向与heroku 相关的内容。显然,我不确定。

【问题讨论】:

  • Heroku 日志具体说了什么?
  • @dirn 在上面添加了日志
  • @Barnaby:请在问题本身的文本中包含您遇到问题的代码和相关的日志记录结果。发布指向整个源代码存储库和日志的链接并不理想,因为这些链接可能会中断/更改,从而使您的问题对于可能遇到相同问题的未来用户毫无用处。此外,它降低了某人想要解决问题的可能性,因为他们必须做额外的工作来调试您的整个应用程序/设置,而不是您首先准确地指定问题所在。跨度>
  • @MarkHildreth 我打算这样做,但代码在本地运行良好,我认为这是 Procfile 的问题。现在将添加它们的主 .py 文件。

标签: python heroku flask


【解决方案1】:

作为日志状态:

错误 R10(启动超时)-> Web 进程在启动后 60 秒内未能绑定到 $PORT

您没有绑定到提供的PORT 变量,因此 Heroku 终止了您的程序。如果您只想玩 Heroku + Flask,只需将您的 __main__ 行更改为:

if __name__ == '__main__':
    from os import environ
    app.run(debug=False, port=environ.get("PORT", 5000), processes=2)

如果这需要处理两个以上的并发连接,您可能希望查看 deploying into standard WSGI containers 上的 Flask 文档部分。

【讨论】:

  • 我在 heroku 日志中收到此错误2014-01-14T02:36:12.390760+00:00 app[web.1]: ImportError: cannot import name environ 我完全按照上面的方式添加了代码,我是否应该在我的文件顶部添加其他导入的导入语句?
  • @Barnaby - 不,应该是 from os import environ 而不是 from sys - 这已在示例中修复。
  • @Barnaby - 看起来像是 Heroku 特有的错误 - 值得与他们一起提出。
猜你喜欢
  • 2023-03-27
  • 2015-01-05
  • 2013-02-01
  • 2020-10-17
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2015-02-26
相关资源
最近更新 更多