【发布时间】:2013-12-23 04:10:30
【问题描述】:
我有一个在本地运行良好的 Flask 应用程序,但是当我推送到 Heroku 时,我收到错误消息:
* Running on http://127.0.0.1:5000/
[INFO] Starting gunicorn 18.0
[ERROR] Connection in use: ('0.0.0.0', 8163)
我尝试了this question 中的解决方案,其中 gunicorn 和 werkzeug 互相争斗,但在我的主应用程序文件 (run.py) 中添加一个 __name__ == "__main__" 块并没有解决我的错误。
This SO post 建议确保我的流程都已清理干净。我这样做了,但它仍然没有用,所以我实际上删除了我的整个 heroku 应用程序并重新推送,它仍然给出了同样的错误。
我的run.py 文件如下所示:
#!pl_env/bin/python
from app import app
if __name__ == "__main__":
app.run(debug=True, port=33507)
# [33507 is the Flask port on Heroku]
我的Procfile 是:
网络:gunicorn 运行:应用程序
应用程序中的__init__.py文件是:
from flask import Flask
import os
from flask.ext.login import LoginManager
app = Flask(__name__)
app.config.from_object('config')
lm = LoginManager()
lm.init_app(app)
lm.login_view = 'login'
from app import views
Views 中包含应用程序的丰富逻辑,但我认为其中没有任何东西会与 gunicorn 混淆。以下是 views.py 的导入以防万一:
from flask import Flask, render_template, flash, redirect
from flask.ext.login import login_required, login_user
from app import app, lm
from forms import LoginForm
我绝对不知道现在该去哪里找出这个连接错误。关于为什么它似乎认为我已经在使用 0.0.0.0 有什么想法吗?
谢谢
莫妮卡
编辑:我使用 foreman start 在本地运行应用程序,它在 0.0.0.0:5000 中运行良好,所以我认为我遇到了 Heroku 问题
EDIT2:我故意破坏了我的视图流程——做了一个内部无限引用——并推动它看看会发生什么。我得到了预期的错误日志,撤消了它,并推动了回滚,现在它可以工作了。我完全不知道为什么这会起作用,除非以预期的方式破坏它会冲刷我的独角兽连接。如果有人对这个谜团有任何解释,我会喜欢的。
【问题讨论】:
-
您的应用程序不应该在
5000上可用,因为您无法指定我可以看到的端口。 (您在run.py中指定了33507并且 gunicorn 的错误消息表明它正在尝试绑定到8163) - 您是否在views.py中创建另一个 Flask 应用程序并在无人看管的情况下运行它? -
这是一个有趣的问题——在我的成功运行中,gunicorn 绑定到
18629,本地工头在看5000,没有人在看33507。我不认为我正在views.py中创建一个新应用程序,我想我正在导入现有的__init__.py,但这里是views.py的要点:gist.github.com/quaintm/7828814 -
啊 - 8163 可能是一个 pid(进程 ID) - 不知何故,当您进行更新时,旧的 gunicorn 进程没有被拆除,从而导致错误。
标签: python heroku flask gunicorn