λ€μμ μ¬μ©νμ¬ μ±μ μμν©λλ€.
gunicorn --worker-class eventlet -w 1 server:app --bind="127.0.0.1:5000"
κ·Έλ¦¬κ³ μΉ μμΌμ 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μΌ μμμΌ, Benoit Chesneau [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@bclark8923 https://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μ μ¬μ©νκ³ μμ΅λκΉ?
μ, λΆνν©λλ€! [email protected]μΌλ‘ μ΄λ©μΌμ
곧
2016λ 3μ 28μΌ μμμΌ, Benoit 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 - μ’μ, κ²°κ΅ μ£Όλ§ μ μ λκ°
https://github.com/kramer65/gunicorn-error μ readmeμμ μ§μΉ¨μ΄ μλ 리ν¬μ§ν 리λ₯Ό μ°Ύμ μ μμ΅λλ€.
btw: μ λ 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
λ°νν©λλ€(μ΄ νλ‘μ νΈμ λ§μ μν dep...):
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 μ΄μ¨λ μ΄ ν°μΌμ μνλ₯Ό μλ €μ£ΌμΈμ :)
@benoitc ALREADY_HANDLED
μμλ gunicornμλ§ ν΄λΉλ©λλ€. Eventletμλ λ€λ₯Έ λ°©μμΌλ‘ μ μλ μ΄ μμμ μ체 λ²μ μ΄ μμ΅λλ€.
μ½λλ₯Ό ν΅ν΄ μΆμ νλ r
κ°μ websocket μ°κ²°μ΄ μ’
λ£λ λ evenletμ ALREADY_HANDLED
λ₯Ό λ°νν©λλ€. μ΄κ²μ eventletμ μν΄ μλμΌλ‘ μ²λ¦¬λ©λλ€: https://github.com/eventlet/eventlet/blob/2cd5f1d9aea53efb4526e7185017bdcc84732588/eventlet/websocket.py#L135.
Gunicornμ (λ΄ μκ°μ) eventletμ ALREADY_HANDLED
μμμ μ체 μμλ₯Ό μΈμνκ³ λμΌν λ°©μμΌλ‘ μ²λ¦¬ν΄μΌ ν©λλ€. λλ κ·Έκ²μ΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν κ²μ΄λΌκ³ μκ°νλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμΌλ©΄ μ’μ΅λλ€. νλ‘λμ
μμ flask-socketio
λ° gunicornμ μ€ν μ€μ΄λ©° λ°μ΄ν° μμ€μ μνμ§ μμ΅λλ€.
λΉμ·ν λ¬Έμ λ₯Ό κ²ͺκ³ μλλ° μ΄ λ¬Έμ μ λν μμμ΄ μλμ§ κΆκΈν©λλ€.
@benoitc - Gunicornμ΄ eventletμ ALREADY_HANDLED μμμ μ체 μμλ₯Ό μΈμνκ³ λμΌν λ°©μμΌλ‘ μ²λ¦¬νλλ‘ νκΈ° μν΄ μμ @miguelgrinberg κ° μ μν μ μμ΄ μ’μ μκ°μ΄λΌκ³ μκ°νμλκΉ?
@kramer65 μ΄μ λν μ§μμ κΉλνκ² μΆκ°ν μ μλ λ°©λ²μ μ°Ύμ μ μλ€λ©΄ eventlet μμ μκ° μ²λ¦¬νλ κ²μ΄ ν©λ¦¬μ μ΄λΌκ³ μκ°ν©λλ€.
μ§κΈ λΉμ₯μ μ΄κ²μ μ²λ¦¬νλ λ
Όλ¦¬κ° 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μμ μΆμλ©λκΉ?
λ΄μΌ
2017λ
2μ 17μΌ κΈμμΌ 16μ 46λΆμ Eddie [email protected]μ΄ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ΄μ λν μμ μ¬νμ μΈμ PyPIμμ μΆμλ©λκΉ?
β
μ΄κΈ°/λ«κΈ° μνλ₯Ό μμ νκΈ° λλ¬Έμ μ΄ λ©μμ§κ° νμλ©λλ€.μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈ
https://github.com/benoitc/gunicorn/issues/1210#issuecomment-280685264 ,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AAA4ogTRMF7EfR25G6gLrktOdh_iA4Ciks5rdcDYgaJpZM4HbcdP
.
μΆμλμλμ?
https://pypi.python.org/pypi/gunicorn
μλμ :(
@benoitc pypiλ‘ νΈμλλ μ λ°μ΄νΈμ λν λ¨μ΄κ° μμ΅λκΉ?
@defionscode λλ λͺ©μμΌ μμΉ¨(λ΄μΌ)μ 릴리μ€λ₯Ό ν κ²μ λλ€.
νλ₯ ν΄μ, κ³ λ§μ΅λλ€
2017λ
2μ 22μΌ μμμΌ μ€μ 11:54 Benoit Chesneau [email protected]
μΌλ€:
@defionscode https://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 μκ² μ΅λλ€ . λλ μ΄κ²μ μ€λ«λμ κΈ°λ€λ Έμ΅λλ€. μμ μ¬νμ΄ μλ μ¬λμ΄ μμΌλ©΄ 곡μ ν΄ μ£ΌμΈμ! κ°μ¬ ν΄μ!