Photo by John Schnobrich on Unsplash |
gunicorn을 bind 옵션만 지정해서 실행하면 에러가 발생했을 때 원인을 찾기가 어렵다.
12345678 (venvpluto) devr@pluton:/works/venvpluto$ gunicorn ––bind 0:5000 “webapp:create_app()”[2022–02–06 08:35:07 +0900] [1270] [INFO] Starting gunicorn 20.1.0[2022–02–06 08:35:07 +0900] [1270] [INFO] Listening at: http://0.0.0.0:5000 (1270)[2022–02–06 08:35:07 +0900] [1270] [INFO] Using worker: sync[2022–02–06 08:35:07 +0900] [1272] [INFO] Booting worker with pid: 1272[2022–02–06 08:35:08 +0900] [1270] [INFO] Shutting down: Master[2022–02–06 08:35:08 +0900] [1270] [INFO] Reason: Worker failed to boot.(venvpluto) devr@pluton:/works/venvpluto$cs
이런 경우 preload 옵션을 추가로 지정하면 애플리케이션 코드에서 발생한 오류를 확인할 수 있다.
12345678910111213141516171819202122232425262728 (venvpluto) devr@pluton:/works/venvpluto$ gunicorn ––preload ––bind 0:5000 “webapp:create_app()”Traceback (most recent call last):File “/works/venvpluto/venv/venvpluto/bin/gunicorn”, line 8, in <module>sys.exit(run())File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py”, line 67, in runWSGIApplication(“%(prog)s [OPTIONS] [APP_MODULE]”).run()File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/app/base.py”, line 231, in runsuper().run()File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/app/base.py”, line 72, in runArbiter(self).run()File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/arbiter.py”, line 58, in __init__self.setup(app)File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/arbiter.py”, line 118, in setupself.app.wsgi()File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/app/base.py”, line 67, in wsgiself.callable = self.load()File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py”, line 58, in loadreturn self.load_wsgiapp()File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py”, line 48, in load_wsgiappreturn util.import_app(self.app_uri)File “/works/venvpluto/venv/venvpluto/lib/python3.8/site-packages/gunicorn/util.py”, line 412, in import_appapp = app(*args, **kwargs)File “/works/venvpluto/webapp/__init__.py”, line 13, in create_appfrom webapp.views import file_viewsFile “/works/venvpluto/webapp/views/file_views.py”, line 6, in <module>from dateutil.relativedelta import relativedeltaModuleNotFoundError: No module named ‘dateutil’(venvpluto) devr@pluton:/works/venvpluto$cs
참고로 preload 옵션에 대한 설명은 아래와 같다.
1 ––preload Load application code before the worker processes are forked. [False]cs