2015-03-30 11 views
9

Tworzę prosty flaskapp, który zamierzam wdrożyć na heroku, po raz pierwszy wdrażając aplikację python na heroku, z tym, że jestem nowy w gunicorn.error: [Errno 98] Adres już w użyciu

Uwagi dodatkowe: Korzystanie z wirtualnego środowiska.

wersja kolby Kolby == 0.10.1

gunicorn == 19.3.0

Korzystanie 'run.py Pythona działa

Korzystanie 'start majster' pojawia się następujący błąd

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=- 

Struktura plików

/ 
... 
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') 

Z tego, co przeczytałem, gunicorn pozwala na tworzenie wielu wątków, co prowadzi mnie do przekonania, że ​​wątki próbują uzyskać dostęp do tego samego portu, który wyrzuca już używany błąd . Jednak nie mam pojęcia, jak go rozwiązać, każda pomoc jest doceniana.

Odpowiedz

7

Wygląda na to, że wywołujesz uruchomienie: flaskapp zamiast aplikacji: flaskapp i run.py próbują otworzyć inną instancję.

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

Po pierwsze, zawsze hermetyzacji Run:

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

i zaktualizować procfile zadzwonić do app.__init__.py zamiast:

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

PS: Nie wiem co procfile lub majster są - rzeczy heroku?

+0

procfile to plik służący do określenia, które polecenia mają zostać uruchomione. najlepiej określone [tutaj] (http://stackoverflow.com/questions/18670186/launching-an-app-in-heroku-what-is -procfile-web-command) Brygadzista jest specyficzny dla paska narzędzi zainstalowanego dla heroku, używa procfile do uruchomienia aplikacji –

+0

. daj mi znać, jeśli proponowana poprawka rozwiązała problem. – Jonathan

+3

Po prostu potrzebowałem dodać , jeśli \ __ nazwa \ __ == '\ __ główny \ __': i zadziałało, dziękuję za dużo –

Powiązane problemy