Flask-Socketio auf Heroku starten

Django, Flask, Bottle, WSGI, CGI…
Antworten
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Hallo zusammen,

ich schlage mich immer noch mit der Chat app rum. Die app funktioniert super auf localhost.
Der nächste Schritt ist diese auf Heroku zu packen.
Ich habe bereits viel recherchiert und rumprobiert und habe auch ordentlich Fortschritte gemacht.

Zurzeit nutze ich den free tier zum Testen.

Ich möchte gunicorn mit gevent nutzen damit der Chat funktioniert, die dependecies habe ich bereits installiert und in die requirement.txt gepackt:

Code: Alles auswählen

Flask-SocketIO==2.9.6
gunicorn==19.7.1
gevent==1.2.2
gevent-socketio==0.3.6
gevent-websocket==0.10.1
Den procfile habe ich einfach aus der docu übernommen und die app startet damit:

Code: Alles auswählen

web: gunicorn -k gevent -w 1 adult_main:app
Der chat funktioniert auch auf heroku, jedoch sehe ich einen Fehler in der web Konsole:

Code: Alles auswählen

socket.io.js:7 WebSocket connection to 'wss://my-    
project.herokuapp.com/socket.io/? 
EIO=3&transport=websocket&sid=0022c1937df648bbab836bfcb4c35' failed: Error   
during WebSocket handshake: Unexpected response code: 500
Auf heroku in der Konsole kommt das, wenn ich die chat page starte:

Code: Alles auswählen

RuntimeError: You need to use the gevent-websocket server
Dennoch funktioniert der Chat.

Ich denke, dass es vielleicht nur eine connection gibt? Sobald 2 Leute chaten wollen, würde es nicht gehen?
Ich meine die Errors hören sich schon übel an, wie kann es dann funktionieren? Ich denke ich habe da doch noch was falsch gemacht.

Was wäre hier die beste Methode die App zu hosten?

Vielen Dank!

P.S. ich habe gelesen, dass gunicorn mit gevent max. 1000 connections halten können, das würde mir reichen.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@Zoja: Du benutzt ja socketio, das als Fallback, falls Websocket nicht funktioniert, dieses mit Long-Polling emuliert.

Laut Fehlermeldung solltest Du einen gevent-websocket-Server startet, also etwas in der Art:

Code: Alles auswählen

gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -w 1 adult_main:app
Zoja
User
Beiträge: 145
Registriert: Freitag 28. Februar 2014, 14:04

Sirius3 hat geschrieben:@Zoja: Du benutzt ja socketio, das als Fallback, falls Websocket nicht funktioniert, dieses mit Long-Polling emuliert.

Laut Fehlermeldung solltest Du einen gevent-websocket-Server startet, also etwas in der Art:

Code: Alles auswählen

gunicorn -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" -w 1 adult_main:app
Vielen Dank, es geht jetzt! Stand auch etwas weiter unten in der Doku, war ne dumme Frage : ).
Antworten