2015-03-30 13 views
9

Ben heroku üzerinde konuşacağım basit bir flaskapp yaratıyorum, ilk kez bir python uygulaması heroku üzerinde dağıttığım, bununla birlikte ben yeni silah tokmağı.hata: [Errno 98] Adres zaten kullanımda

Ek notlar: Sanal bir ortam kullanma. Şişe Flask == 'ustabaşı başlangıç' ı almak kullanma

çalışır 'piton run.py' kullanma 0.10.1

gunicorn == 19.3.0

ait

Versiyon aşağıdaki hata

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

Dosya Yapısı

/ 
... 
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 okuduğundan itibaren birden çok iş parçacığı oluşturulmasına izin verir, bu da beni iş parçacığının hata noktasını kullanan aynı bağlantı noktasına erişmeye çalıştığını düşünmeme neden oluyor. Ancak, nasıl çözeceğimi bilmiyorum, herhangi bir yardım takdir edilir.

cevap

7

Uygulama çağırıyor gibi görünüyor: uygulama yerine flaskapp: flaskapp ve run.py başka bir örneği açmaya çalışıyor.

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

Birincisi, her zaman koşmak encapsulate:

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

Ve çağırmak için procfile güncellemek app.__init__.py yerine:

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

ps: Ben ne procfile veya Foreman bilmiyorum - Kahramanca şeyler?

+0

procfile, hangi komutları çalıştırmak istediğinizi belirtmek için kullanılan bir dosyadır en iyi belirtilen [burada] (http://stackoverflow.com/questions/18670186/launching-an-app-in-heroku-what-is -procfile-web-command) Ustabaşı heroku için yüklenen araç etiketine özgüdür, uygulamayı –

+0

figürlü başlatmak için procfile kullanır. Önerilen düzeltme sorunu ele alırsa bana bildirin. – Jonathan

+3

Sadece ekleyebildim, eğer \ __ name \ __ == '\ __ main \ __': ve çok çalıştı, çok teşekkürler –