2015-03-30 67 views
9

我正在创建一个简单的flaskapp,我将在heroku上部署,第一次在heroku上部署python应用程序,并说那是我对gunicorn的新手。错误:[Errno 98]地址已在使用

附加注释:使用虚拟环境。

瓶瓶== 0.10.1

gunicorn == 19.3.0

使用 '蟒蛇run.py' 工作

使用 '工头开始' 我得到的版本如下错误

16:35:44 web.1 | started with pid 4047 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4047] [INFO] Starting gunicorn 19.3.0 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4047] [INFO] Listening at: http://0.0.0.0:5000 (4047) 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4047] [INFO] Using worker: sync 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4053] [INFO] Booting worker with pid: 4053 
16:35:44 web.1 | * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4053] [ERROR] Exception in worker process: 
16:35:44 web.1 | Traceback (most recent call last): 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker 
16:35:44 web.1 |  worker.init_process() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process 
16:35:44 web.1 |  self.wsgi = self.app.wsgi() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi 
16:35:44 web.1 |  self.callable = self.load() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load 
16:35:44 web.1 |  return self.load_wsgiapp() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
16:35:44 web.1 |  return util.import_app(self.app_uri) 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app 
16:35:44 web.1 |  __import__(module) 
16:35:44 web.1 | File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in <module> 
16:35:44 web.1 |  flaskapp.run(debug=True) 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/flask/app.py", line 772, in run 
16:35:44 web.1 |  run_simple(host, port, self, **options) 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple 
16:35:44 web.1 |  test_socket.bind((hostname, port)) 
16:35:44 web.1 | File "/usr/lib/python2.7/socket.py", line 224, in meth 
16:35:44 web.1 |  return getattr(self._sock,name)(*args) 
16:35:44 web.1 | error: [Errno 98] Address already in use 
16:35:44 web.1 | Traceback (most recent call last): 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker 
16:35:44 web.1 |  worker.init_process() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process 
16:35:44 web.1 |  self.wsgi = self.app.wsgi() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi 
16:35:44 web.1 |  self.callable = self.load() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load 
16:35:44 web.1 |  return self.load_wsgiapp() 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
16:35:44 web.1 |  return util.import_app(self.app_uri) 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app 
16:35:44 web.1 |  __import__(module) 
16:35:44 web.1 | File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in <module> 
16:35:44 web.1 |  flaskapp.run(debug=True) 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/flask/app.py", line 772, in run 
16:35:44 web.1 |  run_simple(host, port, self, **options) 
16:35:44 web.1 | File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple 
16:35:44 web.1 |  test_socket.bind((hostname, port)) 
16:35:44 web.1 | File "/usr/lib/python2.7/socket.py", line 224, in meth 
16:35:44 web.1 |  return getattr(self._sock,name)(*args) 
16:35:44 web.1 | error: [Errno 98] Address already in use 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4053] [INFO] Worker exiting (pid: 4053) 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4047] [INFO] Shutting down: Master 
16:35:44 web.1 | [2015-03-30 16:35:44 +0000] [4047] [INFO] Reason: Worker failed to boot. 
16:35:44 web.1 | exited with code 3 
16:35:44 system | sending SIGTERM to all processes 

Procfile

web: gunicorn run:flaskapp --log-file=- 

文件结构

/ 
... 
run.py 
Procfile 
app/ 
    __init__.py 
    routes.py 
    ... 

run.py

from app import flaskapp 
flaskapp.run(debug=True) 

__init__.py

from flask import Flask 

flaskapp = Flask(__name__) 
from app import routes 

routes.py

from app import flaskapp 
from flask import render_template 
import dbwrapper 

@flaskapp.route('/') 
@flaskapp.route('/home') 
def index(): 
    return render_template('home.html') 

从我读gunicorn允许创建多个线程,这导致我认为线程试图访问相同的端口引发已在使用错误。但我不知道如何解决它,任何帮助表示赞赏。

回答

7

看起来像你在调用run:flaskapp而不是app:flaskapp和run.py试图打开另一个实例。

16:35:44 web.1 | File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in <module> 

第一,永远封装运行:

if __name__ == '__main__': 
    flaskapp.run(debug=True) 

并更新procfile调用app.__init__.py代替:

web: gunicorn app:flaskapp --log-file=- 

PS:我不知道是什么procfile或工头是 - heroku的东西?

+0

procfile是一个文件,用于指定你想运行的命令 最好说[这里](http://stackoverflow.com/questions/18670186/launching-an-app-in-heroku-what-is -procfile-web-command) 工头专用于我为heroku安装的toolbelt,它使用procfile启动应用程序 – 2015-03-30 21:35:12

+0

。请让我知道建议的修复是否解决了这个问题。 – Jonathan 2015-03-30 21:37:27

+3

我只需要添加 如果\ __ name \ __ =='\ __ main \ __': 它的工作原理,非常感谢 – 2015-03-30 21:44:20

相关问题