socket.error: [Errno 98] Address already in use
我正在本地环境中使用foreman start
测试一个简单的烧瓶应用。该应用程序包含一些功能,但它的错误在这里:
if __name__ == '__main__':
app.run()
完整跟踪如下所示。我不确定可能出现什么问题,或者我的本地机器上的套接字是如何使用的。当我从终端运行带有python runapp.py
的应用程序时,一切正常。
Heroku, flask, and python sockets?
在最后一个问题之后,我厌倦了使用
来改变它运行的端口if __name__ == '__main__':
import os
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
但它没有帮助。任何建议,将不胜感激!我是Heroku的新手所以请告诉我是否有更多的信息可以让我更容易解决这个问题。谢谢!
堆栈错误跟踪:
22:13:45 web.1 | started with pid 11121
22:13:45 web.1 | * Running on http://127.0.0.1:5000/
22:13:45 web.1 | Traceback (most recent call last):
22:13:45 web.1 | File "Hunch/Hunch/hunchapp.py", line 49, in <module>
22:13:45 web.1 | app.run()
22:13:45 web.1 | File "/home/agconti/my_dev/github/Hunch/venv/local/lib/python2.7/site-packages/flask/app.py", line 772, in run
22:13:45 web.1 | run_simple(host, port, self, **options)
22:13:45 web.1 | File "/home/agconti/my_dev/github/Hunch/venv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 706, in run_simple
22:13:45 web.1 | test_socket.bind((hostname, port))
22:13:45 web.1 | File "/usr/lib/python2.7/socket.py", line 224, in meth
22:13:45 web.1 | return getattr(self._sock,name)(*args)
22:13:45 web.1 | socket.error: [Errno 98] Address already in use
22:13:45 web.1 | exited with code 1
22:13:45 system | sending SIGTERM to all processes
答案 0 :(得分:1)
来自终端:
heroku config:add PORT=33507
然后将您的应用更改为:
if __name__ == '__main__':
import os
port = int(os.environ.get('PORT', 33507))
app.run(host='0.0.0.0', port=port)
似乎heroku为了自己的目的保留了烧瓶的默认端口。详细讨论可以在这里找到:Deploying Flask app to Heroku。
答案 1 :(得分:1)
终止烧瓶应用程序时,请使用“Control + C”。如果您使用“Control + Z”,它会因为某些原因而将剩余的报告激活...我不知道为什么,但在Debian(wheezy)中我似乎就是这种情况。