Saya memulai aplikasi saya menggunakan
gunicorn --worker-class eventlet -w 1 server:app --bind="127.0.0.1:5000"
Dan ketika menggunakan Flack-SocketIO untuk soket web saya sering mendapatkan kesalahan dengan Gunicorn tidak kembali dari suatu fungsi dengan benar
[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'
Adakah saran tentang konfigurasi yang dapat saya gunakan untuk memperbaikinya atau apakah itu bug?
@bclark8923 apakah Anda memiliki aplikasi yang dapat membantu mereproduksi masalah?
Ya! Apa yang bisa saya kerjakan?
Pada hari Senin, 28 Maret 2016, Benoit Chesneau [email protected] menulis:
@bclark8923 https://github.com/bclark8923 apakah Anda memiliki aplikasi?
yang dapat membantu mereproduksi masalah?—
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung atau lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-202484667
Terima kasih,
Brian Clark
(248) 990 5616
www.hdphealth.com
Kenali saya di Facebook https://facebook.com/bclark8923 & Twitter
https://twitter.com/blaurenceclark!
@ bclark8923 jika dapat dialirkan sehingga pada akhirnya saya dapat memasukkan beberapa bagian dalam tes yang akan membantu :)
Juga versi gunicorn mana yang Anda gunakan?
Ya silahkan! Email saya [email protected] dan 19.x dari beberapa macam dapat memeriksa
segera
Pada hari Senin, 28 Maret 2016, Benoit Chesneau [email protected] menulis:
@bclark8923 https://github.com/bclark8923 kalau bisa di streaming jadi
akhirnya saya bisa memasukkan beberapa bagian dalam tes yang akan membantu :)Juga versi gunicorn mana yang Anda gunakan?
—
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung atau lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1210#issuecomment -202492005
Terima kasih,
Brian Clark
(248) 990 5616
www.hdphealth.com
Kenali saya di Facebook https://facebook.com/bclark8923 & Twitter
https://twitter.com/blaurenceclark!
Menggunakan versi 19.4.5
Saya mengalami masalah yang sama. Saya menggunakan gunicorn versi 18.0.
Sudah ada perbaikan?
jika ada yang punya kode z untuk mereproduksi itu akan membantu :)
@benoitc - Masuk akal.. ;-)
Saya akan memperbaiki sesuatu minggu depan dan memberi tahu Anda!
@benoitc - Baiklah, saya memperbaiki sesuatu sebelum akhir pekan.
Anda dapat menemukan repo dengan instruksi di readme di sini: https://github.com/kramer65/gunicorn-error
btw: Saya menggunakan gunicorn versi 18.0
Mungkin ada sesuatu yang perlu dikembalikan gunicorn.workers.async.ALREADY_HANDLED
atau gunicorn akan mencoba mencatat permintaan segera setelah aplikasi kembali dari pengendali WSGI-nya. Sebagai gantinya, Gunicorn perlu mengetahui bahwa permintaan tersebut sekarang ditangani sepenuhnya oleh aplikasi.
Kedua contoh di direktori "examples/websocket" mengembalikan konstanta ini dari handler WSGI mereka.
@benoitc - Apakah contoh untuk mereproduksi kesalahan membantu Anda menemukan kesalahan? Dapatkah saya menjadi bantuan lain untuk membantu ini diselesaikan?
@kramer65 ya saya mereproduksi kesalahan.
Jadi Gunicorn adalah mesin WSGI murni dan mengharapkan respons WSGI yang berisi status:
https://github.com/benoitc/gunicorn/blob/master/gunicorn/http/wsgi.py#L242
(terkait dengan kode ini: https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/async.py#L103-L119)
Seperti yang dikatakan @tilgovi , Anda dapat melewati penanganan respons dari gunicorn dengan mengembalikan ALREADY_HANDLED
Sejauh yang saya baca kode flash socketio itu membungkus aplikasi labu di socketio.Middleware
yang itu sendiri berasal dari engineio.middleware.Middleware
:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/middleware.py
yang mengembalikan aplikasi wsgi atau penangannya sendiri jika menemukan jalurnya:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/middleware.py#L45 -L52
Jadi itu mengembalikan socketio.Server.handle_request
di jalur soket web:
https://github.com/miguelgrinberg/Flask-SocketIO/blob/master/flask_socketio/__init__.py#L144
yang dengan sendirinya mengembalikan engineio.Server.handle_request
(banyak deps melingkar dalam proyek ini...):
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L184
Pada titik ini tampaknya socket.handle_get_request
atau socket. handle_post_request
menetapkan status:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/socket.py#L69 -L96
Dan kemudian kesalahan mungkin terjadi di sini:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L251 -L252
karena dapat mengembalikan respons tanpa menetapkan status atau apa pun. Saya dapat melihat bahwa pemutakhiran menggunakan objek websocket yang sama seperti pada contoh kita:
https://github.com/benoitc/gunicorn/blob/master/examples/websocket/websocket.py
Saya pikir alih-alih mengembalikan r
final di sini:
https://github.com/miguelgrinberg/python-engineio/blob/master/engineio/server.py#L251 -L252
Mungkin seharusnya mengembalikan ALREADY_HANDLED
seperti di sana:
https://github.com/benoitc/gunicorn/blob/master/examples/websocket/websocket.py#L115
Hanya menebak saja karena kode itu cukup sulit untuk dibaca. Semoga membantu.
@kramer65 beri tahu saya tentang status tiket ini untuk Anda :)
@benoitc konstanta ALREADY_HANDLED
khusus untuk gunicorn. Eventlet memiliki versi sendiri dari konstanta ini, yang didefinisikan dengan cara yang berbeda: https://github.com/eventlet/eventlet/blob/2cd5f1d9aea53efb4526e7185017bdcc84732588/eventlet/wsgi.py#L69.
Nilai r
yang Anda ikuti melalui kode mengembalikan ALREADY_HANDLED
evenlet ketika koneksi websocket berakhir. Ini ditangani secara otomatis oleh eventlet: https://github.com/eventlet/eventlet/blob/2cd5f1d9aea53efb4526e7185017bdcc84732588/eventlet/websocket.py#L135.
Gunicorn harus (saya pikir) mengenali konstanta ALREADY_HANDLED
eventlet selain miliknya sendiri dan menanganinya dengan cara yang sama. Saya pikir itu akan mengatasi masalah ini.
Sangat bagus jika Anda dapat memperbaiki masalah ini. Saya menjalankan flask-socketio
& gunicorn pada produksi saya dan tidak ingin kehilangan data.
Saya mengalami masalah serupa, dan bertanya-tanya apakah ada berita tentang masalah ini?
@benoitc - Apakah menurut Anda saran seperti yang dibuat oleh @miguelgrinberg di atas (untuk membiarkan Gunicorn mengenali konstanta ALREADY_HANDLED eventlet selain miliknya sendiri dan menanganinya dengan cara yang sama) adalah ide yang bagus?
@kramer65 jika Anda dapat menemukan cara untuk menambahkan dukungan untuk itu, saya pikir masuk akal bagi pekerja eventlet untuk menanganinya.
Saat ini logika untuk menangani ini agak terkubur di dalam gunicorn.workers.async.AsyncWorker#handle_request
tapi mungkin itu bisa ditangani dengan tipuan melalui properti statis yang dapat ditimpa oleh pekerja eventlet, atau dengan memanggil metode instance untuk memeriksa sudah ditangani oleh pekerja mana pun- logika spesifik yang mungkin ada, dengan kelas dasar melakukan seperti sekarang.
@tilgovi - Sudah lama sejak Anda mengirimi saya pesan Anda, tetapi bagaimanapun juga saya ingin menanggapi ini. Masalahnya adalah saya agak mencapai batas saya dalam apa yang bisa saya lakukan untuk ini. Saya benar-benar tidak tahu bagaimana melanjutkan untuk menyelesaikan ini.
Sementara itu, log saya dipenuhi dengan pesan kesalahan seperti di bawah ini, jadi saya punya banyak alasan untuk mengerahkan energi untuk menyelesaikannya. Saya hanya tidak sepenuhnya mengerti apa penyebab pasti masalahnya, apalagi saya mengerti bagaimana saya bisa menyelesaikan ini.
Jika ada yang ingin menghubungi saya, saya akan dengan senang hati mendiskusikan masalah ini, dan kemudian saya mungkin bisa sedikit membantu daripada sekarang.
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'
apakah ada yang memperbaikinya? .....
@qwexvf - Sayangnya saya tidak melakukannya. Log saya masih diisi dengan kesalahan. :-(
Orang lain?
@kramer65 saya mengerti. saya sudah menunggu ini sejak lama, jika ada yang memperbaikinya, silakan bagikan dengan kami! Terima kasih!
ada pembaruan?
Saya yakin ada cara yang lebih bersih untuk memperbaikinya, tetapi setidaknya ini adalah permulaan.
@stefaang terima kasih saya akan mencoba memikirkannya!
Kapan perbaikan untuk ini akan dirilis di PyPI?
besok
Pada Jumat, 17 Februari 2017 pukul 16:46, Eddie [email protected] menulis:
Kapan perbaikan untuk ini akan dirilis di PyPI?
—
Anda menerima ini karena Anda mengubah status buka/tutup.Balas email ini secara langsung, lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-280685264 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAA4ogTRMF7EfR25G6gLrktOdh_iA4Ciks5rdcDYgaJpZM4HbcdP
.
Apakah sudah dirilis?
@benoitc ada kabar tentang pembaruan yang didorong ke pypi?
@defionscode saya akan membuat rilis pada kamis pagi (besok).
Luar biasa, terima kasih
Pada Rabu, 22 Februari 2017 pukul 11:54 Benoit Chesneau [email protected]
menulis:
@defionscode https://github.com/defionscode saya akan membuat rilis di
kamis pagi (besok).—
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-281729992 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AEcrYp6QfVpWXhG14f4M-lPDHMn0cFncks5rfGhWgaJpZM4HbcdP
.
Apakah perbaikan ini telah dirilis?
@Decker108 status dilacak oleh https://github.com/benoitc/gunicorn/issues/1471 . Akan dirilis hari ini...
Bug ini masih terjadi di pihak saya dengan versi terbaru 19 dan 20 gunicorn. Apakah itu seharusnya diperbaiki @benoitc ?
Komentar yang paling membantu
@kramer65 saya mengerti. saya sudah menunggu ini sejak lama, jika ada yang memperbaikinya, silakan bagikan dengan kami! Terima kasih!