を使用してアプリを起動します
gunicorn --worker-class eventlet -w 1 server:app --bind="127.0.0.1:5000"
また、WebSocketにFlack-SocketIOを使用すると、Gunicornが関数から正しく戻らないというエラーが発生することがよくあります。
[2016-01-30 10:20:53 -0800] [7330] [ERROR] Error handling request
Traceback (most recent call last):
File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/workers/async.py", line 52, in handle
self.handle_request(listener_name, req, client, addr)
File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/workers/async.py", line 114, in handle_request
resp.close()
File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 423, in close
self.send_headers()
File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 316, in send_headers
tosend = self.default_headers()
File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 297, in default_headers
elif self.should_close():
File "/Users/brianclark/Desktop/Projects/HDP/application/api/venv/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 230, in should_close
if self.status_code < 200 or self.status_code in (204, 304):
AttributeError: 'Response' object has no attribute 'status_code'
これを修正するために使用できる構成に関するアドバイスはありますか、それともバグですか?
@ bclark8923問題の再現に役立つアプリケーションはありますか?
うん! 私に何をしてもらいたいですか?
2016年3月28日(月曜日)には、ブノワChesneauの[email protected]は書きました:
@ bclark8923https ://github.com/bclark8923アプリケーションはありますか
それは問題を再現するのに役立つ可能性がありますか?—
あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信するか、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/1210#issuecomment -202484667
ありがとう、
ブライアンクラーク
(248)990 5616
www.hdphealth.com
Facebook https://facebook.com/bclark8923&Twitterで私を知って
https://twitter.com/blaurenceclark!
@ bclark8923ストリーミングできる場合は、最終的にはテストに役立つ部分を含めることができます:)
また、どのバージョンのgunicornを使用していますか?
はい、お願いします! 私に電子メールを送ってください19.xはチェックすることができます
すぐ
2016年3月28日(月曜日)には、ブノワChesneauの[email protected]は書きました:
@ bclark8923 https://github.com/bclark8923ストリーミングできる場合は、
最終的に私は役立つテストにいくつかの部分を含めることができます:)また、どのバージョンのgunicornを使用していますか?
—
あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信するか、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/1210#issuecomment -202492005
ありがとう、
ブライアンクラーク
(248)990 5616
www.hdphealth.com
Facebook https://facebook.com/bclark8923&Twitterで私を知って
https://twitter.com/blaurenceclark!
バージョン19.4.5を使用
私は同じ問題を抱えています。 gunicornバージョン18.0を使用しています。
すでに利用可能な修正はありますか?
誰かがそれを再現するためのzコードを持っているなら、それは助けになるでしょう:)
@ benoitc-それは理にかなっています.. ;-)
来週何かを修正してお知らせします!
@ benoitc-了解しました。結局、週末の前に何かを修正しました。
こちらのreadmeに手順が記載されたリポジトリを見つけることができます: https :
ところで:私はgunicornバージョン18.0を使用しています
おそらく何かがgunicorn.workers.async.ALREADY_HANDLED
を返す必要があります。そうしないと、アプリケーションがWSGIハンドラーから戻るとすぐにgunicornがリクエストをログに記録しようとします。 代わりに、Gunicornは、リクエストが完全にアプリケーションによって処理されるようになったことを知る必要があります。
「examples / websocket」ディレクトリの両方の例は、WSGIハンドラーからこの定数を返します。
@ benoitc-エラーを再現する例は、エラーを見つけるのに役立ちますか? これを解決するために他に何かお手伝いできますか?
@ kramer65はいエラーを再現しました。
したがって、Gunicornは純粋なWSGIエンジンであり、ステータスを含むWSGI応答を期待しています。
https://github.com/benoitc/gunicorn/blob/master/gunicorn/http/wsgi.py#L242
(このコードに関連:https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/async.py#L103-L119)
@tilgoviが言ったように、ALREADY_HANDLEDを返すことで、gunicornからの応答処理をバイパスできます。
flash socketioのコードを読んでいる限り、フラスコアプリケーションをsocketio.Middleware
でラップしており、それ自体がengineio.middleware.Middleware
から継承しています。
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/middleware.py
パスが見つかった場合は、wsgiアプリケーションまたは独自のハンドラーを返します。
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/middleware.py#L45 -L52
したがって、WebSocketパスでsocketio.Server.handle_request
を返します。
https://github.com/miguelgrinberg/Flask-SocketIO/blob/master/flask_socketio/__init__.py#L144
それ自体がengineio.Server.handle_request
返します(このプロジェクトには多くの循環深度があります...):
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L184
この時点で、 socket.handle_get_request
もsocket. handle_post_request
もステータスを設定していないようです。
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/socket.py#L69 -L96
そして、ここでエラーが発生する可能性があります。
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L251 -L252
ステータスなどを設定せずに応答を返すことができるためです。 アップグレードでは、次の例と同じWebSocketオブジェクトが使用されていることがわかります。
https://github.com/benoitc/gunicorn/blob/master/examples/websocket/websocket.py
ここで最後のr
を返す代わりに、次のように思います。
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L251 -L252
おそらく次のようにALREADY_HANDLED
返すはずです。
https://github.com/benoitc/gunicorn/blob/master/examples/websocket/websocket.py#L115
そのコードは読むのが非常に難しいので、とにかく推測してください。 うまくいけば、それが役立つでしょう。
@ kramer65とにかくこのチケットのステータスについて教えてください:)
この問題を修正できれば素晴らしいです。 プロダクションでflask-socketio
とgunicornを実行していますが、データを失いたくありません。
私は同様の問題を経験していますが、この問題に関するニュースがあるかどうか疑問に思っていましたか?
@ benoitc-上記の
@ kramer65それをきれいにサポートする方法を見つけることが
現在、これを処理するロジックはgunicorn.workers.async.AsyncWorker#handle_request
内に少し埋め込まれていますが、イベントレットワーカーがオーバーライドできる静的プロパティを介した間接参照、またはインスタンスメソッドを呼び出してワーカーによって既に処理されていることを確認することで処理できる可能性があります-存在する可能性のある特定のロジック。基本クラスは現在と同じように機能します。
@ tilgovi-あなたが私にあなたのメッセージを送ってからしばらく経ちました、しかし私は結局これに答えたかったです。 問題は、私がこれのために何ができるかということで、私がちょっと限界に達したということです。 私はこれを解決するためにどのように進めるかについて本当に手がかりがありません。
その間、私のログは以下のようなエラーメッセージでいっぱいになるので、これを解決するためにいくらかのエネルギーを注ぐ理由は十分にあります。 問題の正確な原因が何であるかを完全には理解していません。ましてや、これをどのように解決できるかを理解していることは言うまでもありません。
誰かが連絡を取りたいと思ったら、私はこの問題について喜んで話し合います。そうすれば、私は今よりも少し助けになるかもしれません。
2016-08-23 08:07:16 [2185] [ERROR] Error handling request
Traceback (most recent call last):
File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 45, in handle
self.handle_request(listener, req, client, addr)
File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/workers/async.py", line 102, in handle_request
resp.close()
File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 369, in close
self.send_headers()
File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 284, in send_headers
tosend = self.default_headers()
File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 265, in default_headers
elif self.should_close():
File "/var/www/imd/venv/local/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 198, in should_close
if self.status_code < 200 or self.status_code in (204, 304):
AttributeError: 'Response' object has no attribute 'status_code'
修正しましたか?....。
@ qwexvf-残念ながら私はしませんでした。 私のログはまだエラーでいっぱいです。 :-(
他の人は?
@ kramer65なるほど。 私はこれを何年も待っていました、誰かが修正を持っているなら私たちと共有してください! ありがとう!
更新はありますか?
これを修正するためのよりクリーンな方法があると確信していますが、少なくともそれは始まりです。
@stefaangありがとう、考えてみよう!
これに対する修正はいつPyPIでリリースされますか?
明日
16:46で金、2017年2月17日には、エディの[email protected]は書きました:
これに対する修正はいつPyPIでリリースされますか?
—
開/閉状態を変更したため、これを受け取っています。このメールに直接返信し、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-280685264 、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAA4ogTRMF7EfR25G6gLrktOdh_iA4Ciks5rdcDYgaJpZM4HbcdP
。
リリースされましたか?
@benoitc pypiにプッシュされているアップデートに関する単語はありますか?
@defionscode木曜日の朝(明日)にリリースします。
優れたありがとう
11時54分AMブノワChesneauの水、2017年2月22日には[email protected]
書きました:
@defionscodehttps ://github.com/defionscodeでリリースします
木曜日の朝(明日)。—
あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-281729992 、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AEcrYp6QfVpWXhG14f4M-lPDHMn0cFncks5rfGhWgaJpZM4HbcdP
。
この修正はリリースされましたか?
@ Decker108のステータスは、 https://github.com/benoitc/gunicorn/issues/1471によって追跡され
このバグは、gunicornの最新バージョン19および20でまだ発生しています。 @benoitcで修正されるはず
最も参考になるコメント
@ kramer65なるほど。 私はこれを何年も待っていました、誰かが修正を持っているなら私たちと共有してください! ありがとう!