NGINX λ€μμ μ€νλλ Werkzeug μλ²κ° μμ΅λλ€. Werkzeug μλ²κ° μλ΅νκΈ°λ₯Ό κΈ°λ€λ¦¬λ λμ ν΄λΌμ΄μΈνΈκ° μ°κ²°μ λμΌλ©΄ NGINXλ Werkzeugμ λν νμ΄νλ₯Ό λ«μ΅λλ€. νμ΄μ¬ νλ‘κ·Έλ¨μ΄ Werkzeugμ λν μλ΅μ μμ±ν λ λ€μ μμΈκ° λ°μνκ³ Werkzeugκ° μΆ©λν©λλ€.
μμΆμ (κ°μ₯ μ΅κ·Ό νΈμΆ λ§μ§λ§):
νμΌ "server.py", 81ν,
app.run(νΈμ€νΈ=args.host, ν¬νΈ=args.port, λλ²κ·Έ=False)
νμΌ "/usr/local/lib/python2.7/dist-packages/flask/app.py", 843ν, μ€ν μ€
run_simple(νΈμ€νΈ, ν¬νΈ, μ체, **μ΅μ )
run_simpleμμ νμΌ "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", 694ν
μμ()
νμΌ "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", 659ν, λ΄λΆ
srv.serve_forever()
"/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py" νμΌ, 499ν, serve_forever
HTTPServer.serve_forever(μ체)
"/usr/lib/python2.7/SocketServer.py" νμΌ, 238ν, serve_forever
self._handle_request_noblock()
νμΌ "/usr/lib/python2.7/SocketServer.py", 297ν, _handle_request_noblock
self.handle_error(μμ², client_address)
νμΌ "/usr/lib/python2.7/SocketServer.py", 295ν, _handle_request_noblock
self.process_request(μμ², ν΄λΌμ΄μΈνΈ μ£Όμ)
process_requestμ νμΌ "/usr/lib/python2.7/SocketServer.py", 321ν
self.finish_request(μμ², client_address)
νμΌ "/usr/lib/python2.7/SocketServer.py", 334ν, finish_request
self.RequestHandlerClass(μμ², ν΄λΌμ΄μΈνΈ μ£Όμ, μκΈ°)
νμΌ "/usr/lib/python2.7/SocketServer.py", 651ν, μ΄κΈ°ν
self.finish()
νμΌ "/usr/lib/python2.7/SocketServer.py", 710ν, μλ£
self.wfile.close()
νμΌ "/usr/lib/python2.7/socket.py", 279ν, λ«κΈ°
self.flush()
νμΌ "/usr/lib/python2.7/socket.py", 303ν, νλ¬μ
self._sock.sendall(보기[write_offset:write_offset+buffer_size])
socket.error: [Errno 32] κΉ¨μ§ νμ΄ν
μΆ©λμ λ°©μ§νκΈ° μν΄ λλ½λ μΌλΆ κ΅¬μ± μ΅μ μ΄ μμ΅λκΉ? μΌλ°μ μΌλ‘ λͺ¨λ μμΈκ° catchλκ³ 500 μ€λ₯κ° λ°νλλ©° μλ²λ νμ± μνλ‘ μ μ§λ©λλ€.
Werkzeug κ°λ° μλ²κ° μλ Gunicorn λλ uWSGIμ κ°μ νλ‘λμ WSGI μλ²λ₯Ό μ¬μ©ν©λλ€.
λλ Werkzeug dev μλ²λ₯Ό κ°λ°(μ¦, AFAICT, μλλ μ©λ), μ¦ ν¬νΈ 5000μ μ§μ μ°κ²°λ λΈλΌμ°μ λ₯Ό μ¬μ©νκ³ μλ€λ μ μ μ μΈνκ³ λ λ§€μ° μ μ¬ν λ¬Έμ κ° μμ΅λλ€.
μ€λ₯λ μκ°λΉ μ¬λ¬ λ² λ°μνμ¬ κ³μ κ°λ°νλ €λ©΄ μλ²λ₯Ό μλμΌλ‘ λ€μ μμν΄μΌ ν©λλ€.
λ€μμ μμΆμ μ λλ€.
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 659, in inner
srv.serve_forever()
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 499, in serve_forever
HTTPServer.serve_forever(self)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 238, in serve_forever
self._handle_request_noblock()
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 297, in _handle_request_noblock
self.handle_error(request, client_address)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 655, in __init__
self.handle()
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 216, in handle
rv = BaseHTTPRequestHandler.handle(self)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 340, in handle
self.handle_one_request()
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 251, in handle_one_request
return self.run_wsgi()
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 193, in run_wsgi
execute(self.server.app)
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 186, in execute
write(b'')
File "/Users/fermigier/envs/extranet-spr/lib/python2.7/site-packages/werkzeug/serving.py", line 152, in write
self.send_header(key, value)
File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", line 401, in send_header
self.wfile.write("%s: %s\r\n" % (keyword, value))
IOError: [Errno 32] Broken pipe
κ°λ° μλ²( debug=True
)μμ @sfermigier μ λμΌν λ¬Έμ κ° λ°μνμΌλ©° λμΌν μμΆμ μ€λ₯κ° μμ΅λλ€.
μ΄ λμμ μΌλ°μ μΌλ‘ λ§€μ° κ°λ¨ν κ²½μ°μ λ°μν©λλ€. μΌμ’
μ μλ μμ± κΈ°λ₯μ μ¬μ©νλ κ²½μ°μ
λλ€. λΈλΌμ°μ λ 쿼리 ν ν°μ λν μ°κ²°μ μμν λ€μ μ€μ§νκ³ μΆκ° ν ν°μ λν λ€λ₯Έ μμ²μ μμν©λλ€. λ§μ κΉ¨μ§ νμ΄νλ‘ λλ κ²μ
λλ€. κ·Έλ¦¬κ³ μ΄κ²μ κ°λ° μλ²λ₯Ό μμ ν μ°¨λ¨νλ λ§μ§λ§ 릴리μ€κΉμ§λ λ¬Έμ κ° λμ§ μμμ΅λλ€ .
λ°λΌμ μμ ν κΈ°λ₯μ κ°μΆ μμ© νλ‘κ·Έλ¨ μλ²λ₯Ό μ¬μ©νλλ‘ μ μνλ κ²μ΄ μ’μ ν΄κ²° λ°©λ²μ΄μ§λ§ μ¬κΈ°μ μ¬μ ν λ¬Έμ κ° μμ΅λλ€. λ¬Όλ‘ κ°λ° μ μ© λ¬Έμ μ΄μ§λ§ νΈλ¦¬κ±°νλ κ²μ΄ λ무 μΌλ°μ μ΄λΌλ μ¬μ€μ _νλ‘ν μ½ λ΄λΆ_μ μ΅μνμ§ μμ λ§μ κ°λ°μλ₯Ό λ°©ν΄ν©λλ€.
κΉ¨μ§ νμ΄νλ λ§€μ° μΌλ°μ μ΄λ©°(μ€λ₯λ‘ μΈν κΈ΄ μμ²κ³Ό κ°λ°μκ° λΈλΌμ°μ μ€μ§ λ²νΌμ λλ₯΄λ κ²½μ°) κ°λ° μλ²λ₯Ό μ€λ¨ν΄μλ μ λ©λλ€.
κ·Έλ₯ λ΄ μ견μ
λλ€. :)
@xcash
μ΄ λμμ μΌλ°μ μΌλ‘ λ§€μ° κ°λ¨ν κ²½μ°μ λ°μν©λλ€. μΌμ’ μ μλ μμ± κΈ°λ₯μ μ¬μ©νλ κ²½μ°μ λλ€. λΈλΌμ°μ λ 쿼리 ν ν°μ λν μ°κ²°μ μμν λ€μ μ€μ§νκ³ μΆκ° ν ν°μ λν λ€λ₯Έ μμ²μ μμν©λλ€.
κ΄λ ¨μ΄ μλ κ²½μ° browsersync
with gulp.js
μ¬μ©νμ¬ μ΄ λ¬Έμ κ° λ°μνμμ νμΈν μ μμ΅λλ€.
WSGI μλ² μ€νμ ν¬ν¨νμ§ μλ μ루μ μ΄ μλ μ¬λμ΄ μμ΅λκΉ? λ΄ νΈμ€νΈμ λν΄ SYN μ€μΊμ μννλ λ΄μμ μ΄ λ¬Έμ κ° λ°μνλ κ² κ°μ΅λλ€.
@glennzw κ·νμ νκ²½μ λν΄ λ ꡬ체μ μΌλ‘
FWIW, λλ 릴리μ€λ₯Ό λ§μ΄ λ°λΌ μ‘μ§ λͺ»νκ³ μ΄ (λ§€μ° μ±κ°μ ) λ¬Έμ κ° 2016 λ
5 μμμ 8 μ μ¬μ΄μ λ°μνκΈ° μμνμ΅λλ€. λλ μ΄κ²μ λ΄ setup.py install_requires = ['Werkzeug<0.11', 'flask<0.11', ...
μΆκ°νμ΅λλ€. μ΄κ²μ λ¬Έμ λ₯Ό ν΄κ²°νλ κ² κ°μ΅λλ€(IME, Werkzeugλ₯Ό κ³ μ νλ κ²λ§μΌλ‘λ νΈλ¦μ μννμ§ μλ κ² κ°μ΅λκΉ?)
λμκ² λ³΅μ μ¬λ‘λ μΆ©λΆν κ°λ¨νμ΅λλ€. νμ΄μ§λ₯Ό λ‘λνμ§λ§ λ‘λκ° μλ£λμ§ μλλ‘ νμμμ€. μ¦, _any_ κΉ¨μ§ νμ΄ν μ€λ₯λ₯Ό νΈλ¦¬κ±°νλ©΄ μΉ μλ²κ° μΆ©λνκ³ λ€λ₯Έ μμ²μ μ²λ¦¬νμ§ λͺ»ν©λλ€. IMHO, μΉ μλ²λ ν΄λΌμ΄μΈνΈκ° μ°κ²°μ μ‘°κΈ°μ λ«μ λ _ λμ΄μ§ μ μμ΅λλ€_. μ¬μ§μ΄ κ°λ° μ€μΈ μ°κ²°λ ν¬ν¨λ©λλ€.
λͺ¨λ passthrough_errors
κ° μ΄λκ°μ μ€μ λμ΄ μμ§ μμκΉμ?
@untitaker μ΄ κ²½μ°, νλ νΈ/νλΌμ€ν¬#1674 νλ νΈ/νλΌμ€ν¬#1679 νλ νΈ/νλΌμ€ν¬#1928 κ΄λ ¨μ΄ μμ΅λκΉ?
μ λͺ¨λ₯΄κ² μ΅λλ€. κΈ°μ μ€ ν λͺ μ΄ νμΈν΄ μ£Όμ ¨μΌλ©΄ ν©λλ€.
2016λ 8μ 26μΌ 17:05:25 CESTμ David Lord [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@untitaker μ΄ κ²½μ°, νλ νΈ/νλΌμ€ν¬#1674 νλ νΈ/νλΌμ€ν¬#1679
νλ νΈ/νλΌμ€ν¬#1928 κ΄λ ¨ κ°λ₯μ±μ΄ μμ΅λκΉ?λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -242761250
K-9 Mailμ μ¬μ©νμ¬ Android κΈ°κΈ°μμ 보λμ΅λλ€. μ κ°λ΅ν¨μ μ©μνμμμ€.
cc @miguelgrinberg
Werkzeugλ κΉ¨μ§ νμ΄ν λ° μ°κ²° μ¬μ€μ μ€λ₯λ₯Ό μ²λ¦¬ν΄μΌ νλ€κ³ μκ°ν©λλ€. μ΄κ²μ μ€μ λ‘ μ€λ₯μ νμκ° μλλ©° ν΄λΌμ΄μΈνΈκ° λ°©κΈ μ¬λΌμ‘μ΅λλ€. μ΄ κ²½μ° μ€λ₯ ν¨μ€μ€λ£¨κ° μ€μ λμ΄ μλλΌλ μμ ν¬κ΄ λ°©μμμ 무μν μμΈλ‘ μΈμλλ νΉλ³ν μμΈκ° λ°μν΄μΌ ν©λλ€.
gunicornμ΄ μννλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€. https://github.com/benoitc/gunicorn/blob/39f62ac66beaf83ceccefbfabd5e3af7735d2aff/gunicorn/workers/sync.py#L151 -L154
κ·Έκ²μ΄ ν΄μΌ ν μΌμ
λλ€. λ²μ λ°©λ²μ μμλ³΄λ €κ³ ν©λλ€
μ΄ λμμ΄μ§λ§ μμ§ μ¬μ©ν μ μλ λͺ
νν ν
μ€νΈ μΌμ΄μ€κ° μμ΅λλ€. λ°λΌμ μ§λ¬Έ
μ½ passthrough_errors
.
λλ μ΄κ²μ΄ Werkzeugμ λ²κ·Έκ° μλλ©° μ¬μ©μμ λΈλΌμ°μ κ°
λ€λ₯Έ μμ²μ μ°¨λ¨νλ μ°κ²°μ΄ μμ§ μ΄λ € μμ΅λλ€(λμ
μλ² μΆ©λ). λΈλΌμ°μ λ₯Ό λ«μλ€κ° λ€μ μ΄λ©΄ μλ²κ°
λ€μ κΈ°λ₯.
2016λ 8μ 26μΌ κΈμμΌ μ€μ 11:54:16 -0700μ Miguel Grinbergλ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
Werkzeugλ κΉ¨μ§ νμ΄ν λ° μ°κ²° μ¬μ€μ μ€λ₯λ₯Ό μ²λ¦¬ν΄μΌ νλ€κ³ μκ°ν©λλ€. μ΄κ²μ μ€μ λ‘ μ€λ₯μ νμκ° μλλ©° ν΄λΌμ΄μΈνΈκ° λ°©κΈ μ¬λΌμ‘μ΅λλ€. μ΄ κ²½μ° μ€λ₯ ν¨μ€μ€λ£¨κ° μ€μ λμ΄ μλλΌλ μμ ν¬κ΄ λ°©μμμ 무μν μμΈλ‘ μΈμλλ νΉλ³ν μμΈκ° λ°μν΄μΌ ν©λλ€.
gunicornμ΄ μννλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€. https://github.com/benoitc/gunicorn/blob/39f62ac66beaf83ceccefbfabd5e3af7735d2aff/gunicorn/workers/sync.py#L151 -L154
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -242821084
μ, κ·Έλ¦¬κ³ κΉ¨μ§ νμ΄ν μ€λ₯κ° _are_ νμλ©λλ€. μ, νμ§λ§ μ€λͺ λ λλ‘ μλ²λ₯Ό λμ§ μμμΌ ν©λλ€. κ°λ₯ν μ΄μ μ λν μ΄μ μ견μ μ°Έμ‘°νμμμ€.
μ΅μ λΉνΈλ₯Ό λ€μ ν μ€νΈνλλ° μ¬μ ν λ΄ νκ²½μμ λμΌν λμμ΄ νμλ©λλ€. νμ§λ§ μ¬μμ°μ λ¬Έμ κ° μλ κ² κ°μμ λ΄κ° νΉλ³ν μ΄μ λ₯Ό κΊΌλ΄λ €κ³ νμ΅λλ€.
import time
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
time.sleep(5)
return 'Hello, World!'
if __name__ == "__main__":
app.run()
flask run
λ‘ μμλλ‘ μλνμ§λ§ python hello.py
λ₯Ό ν΅ν΄ μμν λ μλ΅μ΄ λ λλ§λλλ‘ νκΈ° μ μ μΉ λΈλΌμ°μ λ₯Ό λ«μΌλ©΄ μΉ μλ²κ° μΆ©λν©λλ€.
μλ΅μ μΌλΆκ° μμ€λ κ² κ°μ΅λλ€.
2016λ 8μ 26μΌ κΈμμΌ μ€ν 12:29:39 -0700μ Claygλ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ΅μ λΉνΈλ₯Ό λ€μ ν μ€νΈνλλ° μ¬μ ν λ΄ νκ²½μμ λμΌν λμμ΄ νμλ©λλ€. νμ§λ§ μ¬μμ°μ λ¬Έμ κ° μλ κ² κ°μμ λ΄κ° νΉλ³ν μ΄μ λ₯Ό κΊΌλ΄λ €κ³ νμ΅λλ€.
You are receiving this because you were mentioned. Reply to this email directly or view it on GitHub: https://github.com/pallets/werkzeug/issues/954#issuecomment-242829536
μ, slackμμ νΈλ¦¬ν ν±μ 견μ μ μ°¨λ¨νλ λ°©λ²μ΄κ³ ctrl-return
λ μ€ λ°κΏμ νλ λ°©λ²μ
λλ€.
githubμμ νΈλ¦¬ν ν±μ 견μ μ μ°¨λ¨νλ λ°©λ²μ΄μ§λ§ ctrl-return
λ μ μΆνλ λ°©λ²μ
λλ€.
... μ΄μ¨λ ... κ·Όμ‘ κΈ°μ΅
λλ μλ£νκΈ° μν΄ μ μΆν μ§νμ λ΄ κ²μλ¬Όμ νΈμ§νμ΅λλ€. κ·Έλ¦¬κ³ λλ λΉμ μ΄ μ΄λ©μΌμμ λ΅μ₯νλ κ²μ²λΌ 보μ΄κΈ° λλ¬Έμ λ΅μ₯μ νλ κ²λΏμ΄λ©°, githubμμ λμ νΈμ§ νμ λ λ€λ₯Έ ν΅μ§λ₯Ό 보λΌμ§ νμ μ΄ μμ§ μμ΅λλ€.
μ @clayg μ μλ©΄ ν μ€νΈλ‘λ μ¬νν μ μμ΅λλ€. μ€μ λ‘ κΉ¨μ§ νμ΄ν μ€λ₯κ° μ ν λ°μνμ§ μμ΅λλ€. ν΄λΉ μμ²μ΄ μλ΅μ λ°ννκΈ° μ μ λΈλΌμ°μ λ₯Ό λ«μ§λ§ Werkzeugλ μ΄μ¨λ λκΉμ§ μμ²μ μννκ³ 200κ°μ λ‘κ·Έ λΌμΈμ μ½μμ μΈμνκ³ μ€λ₯λ₯Ό νμνμ§ μμ΅λλ€.
λλ λν μ€νΈλ¦¬λ° μλ΅μ μ¬μ©νμ¬ λμλ μ€νΈλ¦Όμμ λΉλμ€ νλ μμ μ 곡νλ νλΌμ€ν¬ λΉλμ€ μ€νΈλ¦¬λ° μμ λ₯Ό μ¬μ©νμ¬ λμΌν νΈλ¦μ μλνμΌλ©°, κ·Έ κ²½μ°μλ λΈλΌμ°μ λ₯Ό λ«μ μ μκ³ μ€λ₯ μμ΄ μμ²μ΄ μ’ λ£λ©λλ€. μ΄κ²μ μ΄μν©λλ€. κ³Όκ±°μ μ΄ μμ© νλ‘κ·Έλ¨μ΄ μμ²μ μ’ λ£νκΈ° μ μ μ½μμ κΉ¨μ§ νμ΄ν μ€λ₯λ₯Ό μ λ°ν κ²μ΄λΌκ³ νμ νκΈ° λλ¬Έμ λλ€.
μ¬μ€ λ무 빨리 λ§νμ΄μ. Python 2.7μ μ¬μ©ν λ λΉλμ€ μ€νΈλ¦¬λ° μ±μΌλ‘ λ§€λ² μ¬μμ°ν μ μμ΅λλ€. 3.5μμ μ¬μμ°ν μ μμ΅λλ€. μμ λͺ¨λ μ€ν μΆμ μ 2.7μ λν κ²μ΄λ―λ‘ Python 3μΌλ‘ ν μ€νΈνλ κ²½μ° μΌλμ λμμμ€.
ν₯λ―Έλ‘μ΄ λ°μ΄ν° ν¬μΈνΈκ° νλ λ μμ΅λλ€. reloaderλ‘ μ€ννλ©΄ μμ νλ‘μΈμ€κ° μ’ λ£λλ©΄ reloaderλ₯Ό μ€ννλ λ§μ€ν° νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€λ₯Ό μμνλ―λ‘ μ€λ¨μ΄ μμ΅λλ€. κ·Έλ¬λ 리λ‘λ μμ΄ μλ²λ₯Ό μ€ννλ κ²½μ° κΉ¨μ§ νμ΄ν μ€λ₯λ‘ μΈν΄ μ½μλ‘ λμκ°λλ€.
νΈμ§: λ€λ₯Έ νλ‘μΈμ€ λΆλΆμ μμνλ 리λ‘λλ₯Ό 무μνμμμ€. μ΄λ λ°μνμ§ μλ κ² κ°κ³ λμ ν΅κ³Ό μ€λ₯ μ€μ μ λ³κ²½νλ ν¨κ³Όλ₯Ό λ³΄κ³ μμλ κ² κ°μ΅λλ€.
μ’μ, μ¬κΈ° λ΄κ° μκ°νλ μΌμ λν λΆμμ΄ μμ΅λλ€.
flush()
λ₯Ό λ°νν©λλ€. μ΄κ²μ νμ¬ μμ λ Python λΌμ΄λΈλ¬λ¦¬μ μ€λλ λ²κ·Έμ μ£Όμ μμ΅λλ€: http://bugs.python.org/issue14574. μ΄ μμ μ ν΄κ²°μ±
μ socket.error
λ₯Ό ν¬μ°©νκ³ λ¬΄μνλ κ²μ΄μμ΅λλ€.
File "/usr/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()
socket.close()
λ©μλκ° μννλ 첫 λ²μ§Έ μμ
μ λ€μ νλ¬μνλ κ²μ
λλ€.
File "/usr/lib/python2.7/socket.py", line 279, in close
self.flush()
handle_error()
λ©μλμ μ λ¬ν©λλ€.handle_error()
μ Werkzeug ꡬνμ passthrough_errors
μ€μ μ μ΄ν΄λ³΄κ³ νμ True
μ€μ νκΈ° λλ¬Έμ EPIPE μ€λ₯λ₯Ό λ€μ λ°μμν€κ³ λ²λΈλ§λλλ‘ ν©λλ€. 맨 μ.Python 3μ μμΌ μ½λλ μμ ν λ€λ₯΄λ©°, νΉν μ£Όλ³μ try/exceptκ° μλ νλ¬μ νΈμΆμ΄ μλ κ²μΌλ‘ 보μ λλ€. EPIPE μ€λ₯λ Python 3μ μ¬μ©ν λ WerkzeugκΉμ§ λ²λΈλ§μ‘°μ°¨ λμ§ μμ΅λλ€.
passthrough_errorsκ° trueλ‘ μ€μ λμ΄ μμ΅λκΉ? Werkzeugμμλ κΈ°λ³Έμ μΌλ‘ falseμ λλ€.
2016λ 8μ 27μΌ 02:10:13 CESTμμ Miguel Grinberg [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ’μ, μ¬κΈ° λ΄κ° μκ°νλ μΌμ λν λΆμμ΄ μμ΅λλ€.
- ν΄λΌμ΄μΈνΈκ° μμ² μ€κ°μ μ¬λΌμ§
- μμ²μ΄ κ³μλ©λλ€. μμΌ μ°κ²°μ λ€μκ³Ό κ°μ΅λλ€.
λ²νΌλ§λμ΄ μμΌλ―λ‘ λλΆλΆμ κ²½μ° μμΌμ λν μ°κΈ°λ
λ¬Έμ .- μμ²μ΄ λλλ©΄ μμΌ μλ² ν΄λμ€λ
flush()
λ°νν©λλ€.
μμΌμ. μ΄κ²μ Python λΌμ΄λΈλ¬λ¦¬μ μ€λλ λ²κ·Έμ μ£Όμ μμ΅λλ€.
νμ¬ μμ λμμ΅λλ€: http://bugs.python.org/issue14574. NS
μ΄ μμ μ ν΄κ²°μ± μsocket.error
λ₯Ό ν¬μ°©νκ³ λ¬΄μνλ κ²μ λλ€.- κ·Έλ° λ€μ μμΌ μλ²λ μ°κ²°μ λ«μΌλ €κ³ ν©λλ€. μ΄κ²μ΄
OPμ μμΆμ μμ λ€μ μ€ν νλ μ:File "/usr/lib/python2.7/SocketServer.py", line 710, in finish self.wfile.close()
- λΆννλ Python 2.7μμ κ°μ₯ λ¨Όμ
socket.close()
λ©μλλ λ€μ νλ¬μλ©λλ€.File "/usr/lib/python2.7/socket.py", line 279, in close self.flush()
- μ΄ λ λ²μ§Έ νλ¬μ μλλ try/exceptλ‘ λ³΄νΈλμ§ μμΌλ―λ‘
EPIPE μμΈλ₯Ό λ°μμν΅λλ€.- μμΌ μλ²λ μμΈλ₯Ό ν¬μ°©ν λ€μ μμΈλ₯Ό μ λ¬ν©λλ€.
μλ²μhandle_error()
λ©μλ.handle_error()
μ Werkzeug ꡬνμ
passthrough_errors
μ€μ μ΄λ©° νμ λ€μμΌλ‘ μ€μ λμ΄ μμΌλ―λ‘
True
, EPIPE μ€λ₯λ₯Ό λ€μ λ°μμν€κ³ μλ‘ λ²λΈλ§λλλ‘ ν©λλ€.Python 3μ μμΌ μ½λλ μμ ν λ€λ₯΄λ©°, νΉν,
μ£Όλ³μ try/except μμ΄ νλ¬μ νΈμΆμ΄ μλ κ² κ°μ΅λλ€.
κ·Έλ€μ. EPIPE μ€λ₯λ μ¬μ©ν λ WerkzeugκΉμ§ λ²λΈλ§λμ§ μμ΅λλ€.
νμ΄μ¬ 3.λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -242881523
K-9 Mailμ μ¬μ©νμ¬ Android κΈ°κΈ°μμ 보λμ΅λλ€. μ κ°λ΅ν¨μ μ©μνμμμ€.
μ€, μν΄: https://github.com/pallets/flask/pull/1679
NVMμ μΈλͺ¨κ° μλ€passthrough_errors
λ app.debug
μ μμ‘΄ν΄μΌ νλ€κ³ μκ°ν©λλ€.
μ€μ λ‘ ν΄λΉ PRμ λλ리λ κ² μΈμλ λ€λ₯Έ μ΅μ
μ΄ μμ΅λλ€. passthrough_errors=True
νλ‘κ·Έλ¨μ λλ²κ±°λ₯Ό μ°κ²°νμ§ μμ κ²½μ° μ’μ κΈ°λ³Έ λμμ΄ μλλλ€.
λ€λ₯Έ λ°©λ²μ μ°Ύμμ΅λλ€. λ κ°μ§ PR:
passthrough_errors=True
μΈ κ²½μ°μλ μμΌ μ€λ₯λ₯Ό λ€μ λ°μμν€μ§ λ§μμμ€. μ΄μ¨λ κ·Έλ° μλλ μλ κ² κ°μμλ λ€ λμ μλ―Έμμ λμ λ³κ²½μ΄λ―λ‘ λ°±ν¬νΈνμ§ μλ κ²μ΄ μ’μ΅λλ€.
https://github.com/pallets/flask/pull/1996 μ΄ νμ© κ°λ₯ν μ루μ μ΄λΌκ³ μκ°ν©λλ€. μ€μν κ²μ μμΈκ° μ νλλ κ²μ μνμ§ μλ μΌλ°μ μΈ κ²½μ°λ₯Ό μμ νλ€λ κ²μ λλ€. μ ννκ³ μΆλ€λ©΄ λλ²κΉ μ€μ΄λ©°, μ΄ κ²½μ° socket.errorκ° μ νλμ΄μλ μ λ λ μ νλλ κ²μ ν° λ¬Έμ κ° μλλλ€.
https://github.com/pallets/werkzeug/pull/998 μμ μ μ’μ§ μμ΅λλ€. μμ© νλ‘κ·Έλ¨μ μ체 μ²λ¦¬κΈ°μ μμΌμΌλ‘ μννλ μμ
μμ ν©λ²μ μΌλ‘ μ΄λ¬ν μμΈλ₯Ό λ°μμν¬ μ μμΌλ©° μ΄λ¬ν μμΈλ 묡μ μ²λ¦¬λ©λλ€. μ΄μμ μΈ μ루μ
μ μ΄λ¬ν λ¬Έμ κ° λ°μν μμΉμμ ν¬μ°©λ λ€μ handle_error
κ° μΈμνκ³ λ¬΄μν μ μλ μΌλΆ μ¬μ©μ μ μ μμΈ ν΄λμ€λ‘ λ€μ λ°μμν€λ κ²μ
λλ€. SocketServer
λ₯Ό λ³κ²½νκ±°λ μ€λ²λ‘λνμ§ μμΌλ €λ κ²½μ° μ΄ λΆλΆμ κ·Έλλ‘ λλ κ²μ΄ μ’μ΅λλ€. EPIPEλ μ½μμ λ€νλμ§λ§ Python 2μμλ§ κ°λ₯νλ©° μ μ΄λ λ€λ₯Έ μμ μ¬νμ΄ μ μ©λ νμλ μλ²λ₯Ό μ€μ§νμ§ μμ κ²μ
λλ€. 무ν΄νκ³ κ³Όκ±°μ μ‘΄μ¬νλ λμμ
λλ€. passthrough_errors
λ³κ²½.
μ€λͺ νλ λμμ PASSTHROUGH_ERRORSκ° νμ±νλ κ²½μ°μλ§ λ°μν©λλ€. κ·Έλ μ§ μμΌλ©΄ Flask λ΄μμ μμΈκ° λ°μν©λλ€.
λλμ΄ λ―Έμ© κ°μ μ΄ κ°μΉκ° μλ€κ³ μκ°ν©λλ€.
2016λ 8μ 27μΌ 18:29:30 CESTμ Miguel Grinberg [email protected] μ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
https://github.com/pallets/flask/pull/1996 μ΄ νμ©λλ€κ³ μκ°ν©λλ€.
ν΄κ²°μ± . μ€μν κ²μ λ€μκ³Ό κ°μ μΌλ°μ μΈ κ²½μ°λ₯Ό μμ νλ€λ κ²μ λλ€.
μμΈκ° μ νλλ κ²μ μνμ§ μμ΅λλ€. μ ννκ³ μΆλ€λ©΄,
κ·Έλ° λ€μ λλ²κΉ μ€μ΄λ©°μ΄ κ²½μ° socket.errorκ° λ°μν©λλ€.
μ νλμ§ μμμΌ ν λ μ νλλ κ²μ ν° λ¬Έμ κ° μλλλ€.https://github.com/pallets/werkzeug/pull/998 μμ μ΄ μ’μ§ μμ΅λλ€.
κ·Έλ μ§λ§. μμ© νλ‘κ·Έλ¨μ λ€μμμ ν©λ²μ μΌλ‘ μ΄λ¬ν μμΈλ₯Ό λ°μμν¬ μ μμ΅λλ€.
μ체 νΈλ€λ¬μ μμΌμΌλ‘ μννλ μμ
침묡νκΈ°λ νλ€. μ΄μμ μΈ ν΄κ²°μ± μ μ΄κ²λ€μ μ‘λ κ²μ λλ€.
κ·Έλ€μ΄ λ°μνλ μ₯μμμ λ€μ μΌλΆ μ¬μ©μ μ μ μμΈλ‘ λ€μ λ°μν©λλ€.
handle_error
κ° μΈμνκ³ λ¬΄μν μ μλ ν΄λμ€μ λλ€. μ°λ¦¬κ°
μλ§λSocketServer
λ₯Ό λ³κ²½νκ±°λ κ³ΌλΆννκ³ μΆμ§ μμ κ²μ λλ€. μ μκ°μλ
ν¬νλ μ΄ λΆλΆμ κ·Έλλ‘ λλ κ²μ λλ€. λΉμ μ EPIPEλ₯Ό λ€ν ν κ²μ λλ€
μ½μμ΄μ§λ§ Python 2μμλ§ κ°λ₯νλ©° μ μ΄λ λ©μΆμ§ μμ κ²μ λλ€.
λ€λ₯Έ μμ μ¬ν μ΄νμ μλ²κ° λ€μ΄κ°λλ€. 무ν΄νκ³
λ΄κ° λ§λ€κΈ° μ μ κ³Όκ±°μ μ‘΄μ¬νλ νλ
passthrough_errors
λ³κ²½.λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -242926832
K-9 Mailμ μ¬μ©νμ¬ Android κΈ°κΈ°μμ 보λμ΅λλ€. μ κ°λ΅ν¨μ μ©μνμμμ€.
λ§μ€ν°μμ μμ νμ΅λλ€.
μ€λͺ νλ λμμ PASSTHROUGH_ERRORSκ° νμ±νλ κ²½μ°μλ§ λ°μν©λλ€.
μ, λλ κ·Έ μΈλΆ μ¬νμ μλ΅νμ΅λλ€. κ·Έλ¬λ μ΄ λ³κ²½μ μ΄ μ€ μ΄λ κ²λ λ¬Έμ κ° λμ§ μλ Python 3μλ μν₯μ λ―ΈμΉ©λλ€. Py3μμ ν΅κ³Ό μ€λ₯κ° νμ±νλλ©΄ μ ν리μΌμ΄μ μμ λ°μνλ ν©λ²μ μΈ socket.errorκ° μΉ¨λ¬΅λ©λλ€.
masterλ wfmμΈ κ² κ°μ΅λλ€. λ€μ 릴리μ€λ₯Ό κΈ°λν©λλ€. κ°μ¬ν©λλ€!
μλ
νμΈμ, μ λ NGINX λ€μμ μ€νλλ Werkzeug κ°λ° μλ²λ₯Ό μ¬μ©νκ³ μμ΅λλ€. λμΌν λ¬Έμ μ μ§λ©΄ν΄ μμ΅λλ€. λꡬλ μ§ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν΄ μ€ μ μμ΅λκΉ?
11:13:11 web.1 | 127.0.0.1 - - [15/Sep/2016 11:13:11] "GET /api/method/frappe.utils.print_format.download_pdf?doctype=Purchase%20Order&name=PO-00001&format=PO&no_letterhead=0 HTTP/1.1" 200 -
11:13:11 web.1 | Error on request:
11:13:11 web.1 | Traceback (most recent call last):
11:13:11 web.1 | File "/home/ommi/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 193, in run_wsgi
11:13:11 web.1 | execute(self.server.app)
11:13:11 web.1 | File "/home/ommi/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 184, in execute
11:13:11 web.1 | write(data)
11:13:11 web.1 | File "/home/ommi/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 152, in write
11:13:11 web.1 | self.send_header(key, value)
11:13:11 web.1 | File "/usr/lib/python2.7/BaseHTTPServer.py", line 401, in send_header
11:13:11 web.1 | self.wfile.write("%s: %s\r\n" % (keyword, value))
11:13:11 web.1 | IOError: [Errno 32] Broken pipe
λμμ£ΌμΈμ
Ragavλ werkzeugμ λ΄μ₯ dev λμ λ€λ₯Έ μμ© νλ‘κ·Έλ¨ μλ²λ₯Ό μ¬μ©ν©λλ€.
gunicornκ³Ό κ°μ μλ². νμ¬λ‘μλ μ μΌν ν΄κ²°μ±
μ
λλ€.
2016-09-15 8:07 GMT+02:00 Ragav μλ¦Ό @github.com:
μλ νμΈμ, μ λ NGINX λ€μμ μ€νλλ Werkzeug κ°λ° μλ²λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
κ°μ λ¬Έμ λ‘ λꡬλ μ§ λλ₯Ό λμΈ μ μμ΅λλ€. ```
11:13:11 web.1 | 127.0.0.1 - - [15/9/2016 11:13:11] "GET
/api/method/frappe.utils.print_format.download_pdf?
doctype=ꡬ맀%20μ£Όλ¬Έ&μ΄λ¦=PO-00001&νμ=PO&no_letterhead=0
HTTP/1.1" 200 -
11:13:11 web.1 | μμ² μ μ€λ₯:
11:13:11 web.1 | μμΆμ (κ°μ₯ μ΅κ·Ό νΈμΆ λ§μ§λ§):
11:13:11 web.1 | νμΌ "/home/ommi/frappe-bench/env/
lib/python2.7/site-packages/werkzeug/serving.py", 193ν, run_wsgi
11:13:11 web.1 | μ€ν(self.server.app)
11:13:11 web.1 | νμΌ "/home/ommi/frappe-bench/env/
lib/python2.7/site-packages/werkzeug/serving.py", 184ν, μ€ν μ€
11:13:11 web.1 | μ°κΈ°(λ°μ΄ν°)
11:13:11 web.1 | νμΌ "/home/ommi/frappe-bench/env/
lib/python2.7/site-packages/werkzeug/serving.py", 152ν, μμ± μ€
11:13:11 web.1 | self.send_header(ν€, κ°)
11:13:11 web.1 | νμΌ "/usr/lib/python2.7/BaseHTTPServer.py", 401ν,
send_headerμμ
11:13:11 web.1 | self.wfile.write("%s: %s\r\n" % (ν€μλ, κ°))
11:13:11 web.1 | IOError: [Errno 32] κΉ¨μ§ νμ΄νλμμ£ΌμΈμ
β
λΉμ μ΄ μΈκΈλμκΈ° λλ¬Έμ μ΄κ²μ λ°λ κ²μ λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ³ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -247243400,
λλ μ€λ λ μμκ±°
https://github.com/notifications/unsubscribe-auth/AA6MZ6DNiRIfL91CLeYOoA70W9_nQQzGks5qqOCMgaJpZM4I58cy
.
μ΅κ·Ό μμ 컀λ°μ λ°λΌ passthrough_errors=Falseλ‘ app.runμ νΈμΆνμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€. YMMV
μΆ©λμ μΌμΌν¨ λ²κ·Έλ 2016λ 12μ 21μΌμ λ¦΄λ¦¬μ€ λ λ²μ 0.12μμ μμ λμμ΅λλ€ .
λ²μ 0.12λ μ§λ μ£Όμλ§ μΆμλμμ΅λλ€.
2017λ 3μ 20μΌ μμμΌ 09:05:00AM -0700μμ Alan Rotmanμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μΆ©λμ μΌμΌν¨ λ²κ·Έλ 2016λ 12μ 21μΌμ λ¦΄λ¦¬μ€ λ λ²μ 0.12μμ μμ λμμ΅λλ€ .
- λ΄λΆ μλ² μ€λ₯(ν μμ² #2006)λ₯Ό λ°ννλ λμ κ°λ° μλ² μΆ©λμ μΌμΌν€λ λμ λ³κ²½μ λλ립λλ€.
--
μ΄κΈ°/λ«κΈ° μνλ₯Ό μμ νκΈ° λλ¬Έμ μ΄ λ©μμ§κ° νμλ©λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -287807602
μ€λ λ°©κΈ ReleaseNotesλ₯Ό 보μκ³ μ΄ μμ μ¬νμ μ€λ«λμ κΈ°λ€λ € μμ΅λλ€.
μ°Έμ‘° :
λ²μ 0.12
2016λ
12μ 21μΌ μΆμ, μ½λλͺ
Punch.
https://pypi.python.org/pypi/Flask/0.12
ν¬κΈ°μ μ
λ‘λλ νμΌ νμ Py λ²μ
Flask-0.12-py2.py3-none-any.whl (md5) νμ΄μ¬ ν 2.7 2016-12-21 80KB
Flask-0.12.tar.gz(md5) μμ€ 2016-12-21 519KB
μ, λ€, νλΌμ€ν¬λ₯Ό λ§μνμλκ΅°μ. νμ νλ.
2017λ 3μ 20μΌ μμμΌ 09:22:15AM -0700μμ Alan Rotmanμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
μ€λ λ°©κΈ ReleaseNotesλ₯Ό 보μκ³ μ΄ μμ μ¬νμ μ€λ«λμ κΈ°λ€λ € μμ΅λλ€.
μ°Έμ‘° :
λ²μ 0.12
2016λ 12μ 21μΌ μΆμ, μ½λλͺ Punch.https://pypi.python.org/pypi/Flask/0.12
ν¬κΈ°μ μ λ‘λλ νμΌ νμ Py λ²μ
Flask-0.12-py2.py3-none-any.whl (md5) νμ΄μ¬ ν 2.7 2016-12-21 80KB
Flask-0.12.tar.gz(md5) μμ€ 2016-12-21 519KB--
μ΄κΈ°/λ«κΈ° μνλ₯Ό μμ νκΈ° λλ¬Έμ μ΄ λ©μμ§κ° νμλ©λλ€.
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/pallets/werkzeug/issues/954#issuecomment -287813405
threaded=True λͺ¨λμ werkzeugμμ flask 0.12.2λ₯Ό μ€νν λ μ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μλ μ¬λμ μν μ°Έκ³ μ¬ν:
μ€λ λ λͺ¨λμμ κΈ°λ³Έμ μΌλ‘ κ° werkzeug μ€λ λμλ μ€μ λ‘ μ¬μ ν μ΄ λ¬Έμ κ° μλ κ² κ°μ΅λλ€. μ¦, λ°ννλ λ° μκ°μ΄ 걸리λ κ²½λ‘λ₯Ό μμ²ν λ€μ ν΄λΌμ΄μΈνΈμμ μ°κ²°μ λ«μΌλ©΄ νΉμ werkzeugκ° IOError Broken Pipeλ₯Ό κΈ°λ‘ν λ€μ μ£½λλ€. λ΄ μμ© νλ‘κ·Έλ¨μμ μ΄κ²μ΄ μ΄λ»κ²λ λ©λͺ¨λ¦¬ λμλ₯Ό μΌμΌν€κ³ μλ€λ κ²μ λ°κ²¬νλ€λ μ μ μ μΈνκ³ μλ² μ 체λ κ³μ μλν©λλ€. λͺ¨λ μ€λ λμμ νμ΄νκ° λμ΄μ§ ν νλΌμ€ν¬ νλ‘μΈμ€κ° μ²μ²ν μ±μ₯νκ³ λͺ¨λ RAMμ μ¬μ©ν λ€μ SWAPμ μ¬μ©ν λ€μ λ§μ§λ§μΌλ‘ OSμ μν΄ μ¬λ§.
app.runμμ passthrough_errors=Falseλ₯Ό λͺ
μμ μΌλ‘ μ μ‘νλ©΄ λ¬Έμ κ° ν΄κ²°λ κ² κ°μ΅λλ€. ν΄λΌμ΄μΈνΈ μ°κ²°μ΄ λκΈΈ λ μ€λ λκ° λ μ΄μ μ£½μ§ μκ³ μ μμ μΌλ‘ IOErrorλ₯Ό κΈ°λ‘νκ³ λ€μλ κΈ°λ‘ν©λλ€(passthrough_errors=Falseλ₯Ό λͺ
μμ μΌλ‘ μ€μ νμ§ μκ³ λ λ³Έ μ μ΄ μμ).
Exception happened during processing of request from ('127.0.0.1', 50652)
----------------------------------------
κ·Έλ° λ€μ μλ²λ κ³μ μ μμ μΌλ‘ μ€νλ©λλ€. λ©λͺ¨λ¦¬ λμκ° λ€μ λνλλμ§ νμΈνλ €λ©΄ μμ§ λͺ μκ°μ κΈ°λ€λ €μΌ νμ§λ§ κ·Έλ μ§ μκΈ°λ₯Ό λ°λλλ€.
λκ΅°κ°μκ² λμμ΄ λ κ²½μ°λ₯Ό λλΉνμ¬.
Ubuntu VMμ Kubernetesμ μλ Ubuntu Docker 컨ν μ΄λμμλ μ΄ μ€λ₯κ° λ°μνμ΅λλ€.
Error on request:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 270, in run_wsgi
execute(self.server.app)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 261, in execute
write(data)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 227, in write
self.send_header(key, value)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 412, in send_header
self.wfile.write("%s: %s\r\n" % (keyword, value))
IOError: [Errno 32] Broken pipe
μλ‘μ΄ Ubuntu xenial VMμ λ§λ€κ³ Kubernetesμ Ubuntu Docker 컨ν μ΄λμμ λμΌν μ½λλ₯Ό μ€ννλλ° μ΄ μ€λ₯κ° νμλμ§ μκ³ Python Flaskκ° μμλλ‘ μλνμ΅λλ€. λ΄ νΈμ€νΈ(Ubuntu VM)μ λ¬Έμ κ° μλ€κ³ μκ°ν©λλ€.
@vhosakot μ± κ΅¬μ±μ μ΄λ»κ² μ€μ νλμ§ μλ €
κ²½λ‘ κΈ°λ₯μμ κ²½λ‘ μ§μ μ μν λ€λ₯Έ κΈ°λ₯μ μ¬μ©νμ΅λλ€.
ν΄λΉ ν¨μμ μλ΅μμ λ°μ΄ν°λ₯Ό κ°μ Έμμ΅λλ€.
μ΄μ ν΄λΉ λ°μ΄ν°μ _loads()_λ₯Ό μ¬μ©νλ©΄ μ€λ₯κ° λ°μν©λλ€.
...
response = get_contents().data
if response:
data = loads(response)
..
μ€λ₯: IOError: [Errno 32] Broken pipe
κ°μ₯ μ μ©ν λκΈ
μ΅κ·Ό μμ 컀λ°μ λ°λΌ passthrough_errors=Falseλ‘ app.runμ νΈμΆνμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€. YMMV