Gunicorn: ๋‚ด webapp์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•ด gunicorn๊ณผ ํ•จ๊ป˜ pdb๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2011๋…„ 03์›” 25์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: benoitc/gunicorn

๋ถ„๋ช…ํžˆ cherrypy๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ ์ฝ”๋“œ ์ค‘๊ฐ„์— pdb.settrace()๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ cherrypy๋ฅผ ์‹œ์ž‘ํ•œ ํ„ฐ๋ฏธ๋„์—์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๋Œ์•„๋‹ค๋‹ˆ๋ฉฐ ๋ฌผ๊ฑด์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๋ณธ์ ์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋น„์Šทํ•œ ๊ฒƒ๋“ค์ด .NET๊ณผ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์— ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

gunicorn์—์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ป๊ฒŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ๊ณ  ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ณต์œ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

gunicorn_logfile = "/dev/null"
gunicorn_loglevel = "error"

debug = True
timeout = 900000
workers = 1
worker_class = "sync"

pdb.set_trace() ๋ฅผ ๋˜์ง€๋ฉด ๋””๋ฒ„๊ฑฐ๊ฐ€ stdout๊ณผ ์„ž์ด์ง€ ์•Š๊ณ  pdbpp ๋˜๋Š” pdb์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋‹จ์ผ ๋™๊ธฐํ™” ์ž‘์—…์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ post_fork ํ›„ํฌ์—์„œ pdb ๊ตฌ์„ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์œผ๋ฉด ์ž์œ ๋กญ๊ฒŒ ๋‹ค์‹œ ์—ฌ์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ๊ณ  ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ณต์œ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

gunicorn_logfile = "/dev/null"
gunicorn_loglevel = "error"

debug = True
timeout = 900000
workers = 1
worker_class = "sync"

pdb.set_trace() ๋ฅผ ๋˜์ง€๋ฉด ๋””๋ฒ„๊ฑฐ๊ฐ€ stdout๊ณผ ์„ž์ด์ง€ ์•Š๊ณ  pdbpp ๋˜๋Š” pdb์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋Š” ๋‚ด๊ฐ€ ์ฐพ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰