ããã«ã¡ã¯gunicornã®ã¡ã³ããã
ç°å¢ïŒ
python 3.6.1
pyramid==1.9.2
2019幎9æ12æ¥ã«ããã®Stack Overflowã®ææ¡ã«åŸã£ãŠãå
éšpyramid
ãµãŒããŒã®ãããã€æ¹æ³ããªãã¡ã¯ã¿ãªã³ã°ãã waitress
ãgunicorn
ã«çœ®ãæããŸããã
https://stackoverflow.com/a/26872261/10491481
å
éšPRãè¡ãããæç¹ã§ã gunicorn
ã®ææ°ãªãªãŒã¹ã¯19.9.0ã§ããã
ç¹ã«ãéçºããã³æ¬çªã®CentOS 6.5
ãµãŒããŒã§ã®å€æŽããã¹ãããããã«ãä»æ¥ãå®è£
ã確èªããããã«äŸé ŒãããŸããã ã³ãŒãããŒã¹ã®æ°ããgit clone
ã䜿çšããŠãããè¡ãããšã«ããŸããã
PRãäœæãããšãã setup.py
ã§gunicorn
ã®ããŒãžã§ã³ãæå®ããŠããªãã£ããããä»æ¥pip install
ãå®è¡ãããšãïŒäºæããã«ïŒ gunicorn==20.0.0
ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸããã
[server:main]
$ã®äžã®$ development.ini
ã®èšå®ããèµ·åæã«åæ ãããªãã£ãçç±ã¯æããã§ã¯ãããŸããã§ããã
æ確ã«ããããã«ã development.ini
ã®æ¬¡ã®èšå®ã䜿çšããŸãã
[server:main]
use = egg:gunicorn#main
host = 0.0.0.0
port = 9090
workers = 1
worker_class = gevent
certfile=/etc/ssl/certs/current/webserver.cer
keyfile=/etc/ssl/certs/current/private.key.u
ca_certs=/etc/ssl/certs/current/intermediate.cert
gunicorn 19.9.0
ïŒ
$ gunicorn --version
gunicorn (version 19.9.0)
$ gunicorn --paste development.ini
[2019-11-12 12:42:59 -0800] [16733] [INFO] Starting gunicorn 19.9.0
[2019-11-12 12:42:59 -0800] [16733] [INFO] Listening at: https://0.0.0.0:9090 (16733)
[2019-11-12 12:42:59 -0800] [16733] [INFO] Using worker: gevent
[2019-11-12 12:42:59 -0800] [16744] [INFO] Booting worker with pid: 16744
gunicorn 20.0.0
$ gunicorn --version
gunicorn (version 20.0.0)
$ gunicorn --paste development.ini
[2019-11-12 12:45:28 -0800] [17295] [INFO] Starting gunicorn 20.0.0
[2019-11-12 12:45:28 -0800] [17295] [INFO] Listening at: http://127.0.0.1:8000 (17295)
[2019-11-12 12:45:28 -0800] [17295] [INFO] Using worker: sync
[2019-11-12 12:45:28 -0800] [17300] [INFO] Booting worker with pid: 17300
2ã€ã®åºåã®éã®æ³šæïŒ
gunicorn 20.0.0
ã®åºåãhttp
ã§ããããšã«æ³šæããŠãã ããïŒhost
åŒæ°ãæ£ãããªããªããŸããïŒ 0.0.0.0
127.0.0.1
ã䜿çšïŒport
åŒæ°ãæ£ãããªããªããŸããïŒ 9090
8000
ã䜿çšïŒgunicorn 20.0.0
ã®å€æŽãã°ã調ã¹ãŸããïŒ
http://docs.gunicorn.org/en/stable/news.html
ãããã --paste
åŒæ°ã«å¯Ÿããæå³çãªé倧ãªå€æŽã«ã€ããŠã¯èšåãããŠããªãããã§ãã
䟡å€ãããã®ã§ãã³ãã³ãã©ã€ã³ã§gunicorn 20.0.0
ã䜿çšããŠå¯èœãªåŒæ°ãæž¡ããšããµãŒããŒã¯æå³ãããšããã«èµ·åããŸãã
$ gunicorn \
--paste development.ini \
-b 0.0.0.0:9090
--workers 1 \
--certfile /etc/ssl/certs/current/webserver.cer \
--keyfile /etc/ssl/certs/current/private.key.u
[2019-11-12 12:54:08 -0800] [18979] [INFO] Starting gunicorn 20.0.0
[2019-11-12 12:54:08 -0800] [18979] [INFO] Listening at: https://0.0.0.0:9090 (18979)
[2019-11-12 12:54:08 -0800] [18979] [INFO] Using worker: sync
[2019-11-12 12:54:08 -0800] [18985] [INFO] Booting worker with pid: 18985
ãã®åé¡ãç解ããäžã§ã®å©ããããã ããã°å¹žãã§ãã
ãããåçŸå¯èœã«ããããã«ãç§ã®ç°å¢ã«ã€ããŠæäŸã§ãã詳现ãããã°æããŠãã ããã
ããããšãã
ã³ãªãŒ
è¬çœªããããŸãã å€æŽãã°ã®ãšã³ããªã«ã¯ãSimplifyPasteDeploymentã®ããã¥ã¡ã³ãããšããæžãããŠããªãã®ã§ãããã§ããè¯ããã¥ãŒã¹ãšã³ããªãæºåããã®ãæäŒãã¹ãã§ããã
ãã®ããã®PRã¯ããã«ãããŸãïŒ https ïŒ//github.com/benoitc/gunicorn/pull/1957
以åã¯use = egg:gunicorn#main
ãéæšå¥šã«ããŸããããçŸåšã¯éæšå¥šã§ã¯ãããŸããã ãã®å€æŽã¯ãPasteDeployäºæç°å¢ã§ã®Gunicornã®åœ¹å²ãæ確ã«ããããšãç®çãšããŠããŸãã
ãã®ã¹ã¿ã€ã«ã®.ini
ãã¡ã€ã«ã§Gunicornã䜿çšããã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸãã
æåã®ãªãã·ã§ã³ã¯ã gunicorn
CLIã䜿çšããããšã§ãã ãããè¡ããšãã¯ãGunicornç¬èªã®CLIãã©ã°ãŸãã¯Gunicornç¬èªã®æ§æã¢ãžã¥ãŒã«ïŒããã©ã«ãgunicorn.conf.py
ïŒã䜿çšããŠãµãŒããŒåŒæ°ãæ§æããå¿
èŠããããŸãã Gunicorn bindã¯ãœã±ããããã€ã³ããããªããŒãã管çããPIDãã¡ã€ã«ãæžã蟌ã¿ãŸãã Gunicornã¯ã .ini
ã®app
ã»ã¯ã·ã§ã³ã䜿çšããŠãåŒã³åºãå¯èœãªã¢ããªã±ãŒã·ã§ã³ãæ§æã§ããŸãã
2çªç®ã®ãªãã·ã§ã³ã¯ã pserve
ãªã©ã®è²Œãä»ãã¹ã¯ãªããã©ã³ããŒã䜿çšããããšã§ãã ãã®å Žåããã®ã¹ã¯ãªããã©ã³ããŒã¯ããªããŒãã®ç®¡çãPIDãã¡ã€ã«ã®æžã蟌ã¿ãªã©ãè¡ããŸãã ä»ã®ã»ãšãã©ã®ãªãã·ã§ã³ã¯åŒãç¶ãæ©èœããŸããã .ini
ãã¡ã€ã«ã®server
ãããã¯ã䜿çšããã«ã¯ã貌ãä»ããšäºææ§ã®ããã¹ã¯ãªããã©ã³ããŒãåŒã³åºãå¿
èŠããããŸãã Gunicornã¯ãã¯ããã®ãããªã¹ã¯ãªããã©ã³ããŒã§ã¯ãããŸããã
ãã£ãšæ確ã«ããããšãã§ãããã©ããæããŠãã ããã
ããªãã®å Žåã以åãšåãããã«ç¶è¡ã§ããã¯ãã§ããã gunicorn
ããã$ pserve
ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãéå§ããŸãã Gunicornã®ãã¹ãŠã®ãµãŒããŒæ§æã¯ããã§ã«è¡ã£ãŠããããã«ã server
ãããã¯ã«å«ããããšãã§ããŸãã
以åã®åäœã§ã¯ããã¡ã€ã«ãšç«¶åãããªãã·ã§ã³ãã³ãã³ãã©ã€ã³ã§æå®ã§ãããããæ··ä¹±ãæãå¯èœæ§ããããŸããã ãŸãã .ini
ãã¡ã€ã«ã§è£éçšã®æ§æå€æ°ãæå®ããæ©èœãè¿œå ããïŒç°ãªãapp
ãããã¯ã«å ããŠïŒç°ãªã$ server
ãããã¯ãæå®ããæ©èœãè¿œå ããããã«èŠæ±ãããŸããã ãã®çµæãããããã¹ãŠã®æ©èœã®ãµããŒããè¿œå ããããšããã®ã§ã¯ãªããGunicornãPaste_server_ã©ã³ããŒãšããŠäœ¿çšããããšãå»æ¢ããããšã決å®ãããŸããã Gunicorn CLIã¯ãPaste Deploy .ini
ãã¡ã€ã«ã®èªã¿åãããµããŒãããŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ãªããŸãããã server
ãããã¯ã®äœ¿çšã¯ããã®ãšã³ã·ã¹ãã ã®å°çšããŒã«ã«ä»»ãããŠããŸãã
ããªãã®å Žåã以åãšåãããã«ç¶è¡ã§ããã¯ãã§ããã
gunicorn
ããã$pserve
ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãéå§ããŸãã
éãå¿ç@tilgoviãããããšãïŒ
ããªãã®æšèŠã«åŸãïŒ
$ pserve development.ini
# ...
Starting server in PID 40148.
[2019-11-12 14:26:30 -0800] [40148] [INFO] Starting gunicorn 20.0.0
[2019-11-12 14:26:30 -0800] [40148] [INFO] Listening at: https://0.0.0.0:9090 (40148)
[2019-11-12 14:26:30 -0800] [40148] [INFO] Using worker: gevent
[2019-11-12 14:26:30 -0800] [40263] [INFO] Booting worker with pid: 40263
ããã¯çŽ æŽãããããšã§ããç§ãéããå
éšPRã®äžéšã§ã¯ãã³ãã³ãpserve
ãgunicorn
ã«å€æŽããå¿
èŠããããŸãããããã¯ãç§ãå
ã®éçºè
ã§ã¯ãªããããå°ãèŠæããŠããŸãããå
éšAPIãµãŒããŒã
ããã§åé¡ã¯è§£æ±ºããŸããããã®åé¡ãèªç±ã«éããŠãã ãã=ïŒ
ããããšãã
ã³ãªãŒ
æåŸã«ãã1ã€ãæãåºãã詳现ããã¹ãŠè¿œå ãããšæããŸãã server
ãããã¯ãegg:gunicorn#main
以å€ã®ãã®ãæå®ããå Žåã§ãã$ gunicorn --paste production.ini
ãåŒã³åºããšããµãŒããŒãšããŠGunicornã䜿çšãããå¯èœæ§ããããŸãã
Gunicornã¯äž»ã«ãµãŒããŒããã³ããã»ã¹ãããŒãžã£ãŒã§ãããããGunicornãä»»æã®PasteäºæãµãŒããŒãåŒã³åºãããã®äžè¬çãªCLIã§ããããšã¯æå³ããããŸããã 代ããã«ãGunicornã¯Paste Deployã¢ããªã±ãŒã·ã§ã³ããµããŒããããµãŒããŒã§ãããPasteäºæã®ãµãŒããŒã§ãã ãã ããããã¯è²Œãä»ãã¹ã¯ãªããã©ã³ããŒCLIã§ã¯ãããŸããã
ãã®ããã«Pyramidã¯ãã¯ããã¯ã§åé¡ãéããŸããïŒ https ïŒ//github.com/Pylons/pyramid_cookbook/issues/222
ããã¯Gunicornèªäœã§åŸ¹åºçã«ææžåãããšæããŸããããæåã¯ãªãã¡ã¬ã³ã¹ãèŠã€ãããŸããã§ããã ããã«ãããŸãïŒ httpïŒ //docs.gunicorn.org/en/stable/run.html#paste -deployment
@tilgoviã¯ãããã¯ç§ã®ããŒã ã«ãšã£ãŠã倧ããªå€åã§ããã ãããããå€æŽãã°ã®é倧ãªå€æŽéšåã«ç§»åãã䟡å€ããããŸããïŒ
åé¡ãå床éããŠãèªå·±å²ãåœãŠããŸãã ããã§å€æŽãã°ãèªã¿ãããããããã«æŽæ°ããããéããŸãã
ç¹°ãè¿ãã«ãªããŸãããæåã«å€æŽãã°ã§ãããããæ確ã«åŒã³åºããªãã£ãããšããè©«ã³ããŸãã
@tilgoviãã³ã
ãããå¥ã®åé¡ãšããŠéãå¿ èŠããããã©ããããç¥ãããã ããã
ããã¯ã³ãŒãããŒã¹ã®å€ç«ããåé¡ã§ããå¯èœæ§ããããŸãããããå°ããã¹ãããåŸãç§ã®ããŒã ã¯ãAPIãµãŒããŒã®å Žåã gunicorn 20.0.0
ãé¢æ°pyramid_ldap3.get_ldap_connector
$ãå£ããŠããããšã«æ°ä»ããŸããã
gunicorn 20.0.0
ïŒ$ pip list | grep gunicorn
gunicorn 20.0.0
$ pserve bioapps/development.ini
[2019-11-20 15:55:30 -0800] [9902] [INFO] Starting gunicorn 20.0.0
[2019-11-20 15:55:30 -0800] [9902] [INFO] Listening at: https://0.0.0.0:10999 (9902)
[2019-11-20 15:55:30 -0800] [9902] [INFO] Using worker: gevent
[2019-11-20 15:55:30 -0800] [10034] [INFO] Booting worker with pid: 10034
/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:53: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.util.ssl_ (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/ssl_.py)', 'urllib3.util (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/__init__.py)'].
monkey.patch_all()
[2019-11-20 15:57:54,189] INFO [access:342][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" {'username': 'colim', 'password': ''}
[2019-11-20 15:57:57,276] ERROR [exc_logger:114][DummyThread-1] 'https://bioappsdev02.bcgsc.ca:10999/session'
Traceback (most recent call last):
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/tweens.py", line 39, in excview_tween
response = handler(request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/router.py", line 156, in handle_request
view_name
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/view.py", line 642, in _call_view
response = view_callable(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/config/views.py", line 181, in __call__
return view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 390, in attr_view
return view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 368, in predicate_wrapper
return view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 439, in rendered_view
result = view(context, request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid/viewderivers.py", line 148, in _requestonly_view
response = view(request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/cornice/service.py", line 493, in wrapper
response = view_(request)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/bioapps/api/endpoints/session.py", line 139, in session_post
username, request.validated['password'], request,
File "/home/colim/Projects/bioapps/bioapps.api.ssl/bioapps/api/endpoints/session.py", line 27, in get_ldap_groups
auth = connector.authenticate(username, password)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid_ldap3/__init__.py", line 208, in authenticate
password=escape_for_search(password))
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid_ldap3/__init__.py", line 82, in execute
with manager.connection() as conn:
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/pyramid_ldap3/__init__.py", line 165, in connection
auto_bind=True, lazy=False, read_only=True)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/core/connection.py", line 326, in __init__
self.do_auto_bind()
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/core/connection.py", line 343, in do_auto_bind
self.bind(read_server_info=True)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/core/connection.py", line 585, in bind
_, result = self.get_response(response)
File "/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/ldap3/strategy/base.py", line 370, in get_response
raise LDAPResponseTimeoutError('no response from server')
ldap3.core.exceptions.LDAPResponseTimeoutError: no response from server
[2019-11-20 15:57:57,298] INFO [access:362][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" 500 206
gunicorn 19.9.0
$ pip install gunicorn==19.9.0
Collecting gunicorn==19.9.0
Using cached https://files.pythonhosted.org/packages/8c/da/b8dd8deb741bff556db53902d4706774c8e1e67265f69528c14c003644e6/gunicorn-19.9.0-py2.py3-none-any.whl
Installing collected packages: gunicorn
Found existing installation: gunicorn 20.0.0
Uninstalling gunicorn-20.0.0:
Successfully uninstalled gunicorn-20.0.0
Successfully installed gunicorn-19.9.0
$ pip list | grep unicorn
gunicorn 19.9.0
$ gunicorn --paste bioapps/development.ini
[2019-11-20 16:03:45 -0800] [12015] [INFO] Starting gunicorn 19.9.0
[2019-11-20 16:03:45 -0800] [12015] [INFO] Listening at: https://0.0.0.0:10999 (12015)
[2019-11-20 16:03:45 -0800] [12015] [INFO] Using worker: gevent
[2019-11-20 16:03:45 -0800] [12018] [INFO] Booting worker with pid: 12018
[2019-11-20 16:04:39,292] INFO [access:342][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" {'username': 'colim', 'password': ''}
[2019-11-20 16:04:39,527] INFO [access:362][DummyThread-1] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:10999/session HTTP/1.1" 200 639
gunicorn 20.0.0
ãšgunicorn 19.9.0
$ã®éã§$ development.ini
ã«å€æŽã¯å ããããŸããã§ããã
èå³æ·±ãããšã«ã次ã®ã³ãã³ãã§ãµãŒããŒãèµ·åãããšã gunicorn 20.0.0
ã§ãšã©ãŒãåæ¢ã§ããŸãã
$ pip list | grep unicorn
gunicorn 20.0.0
$ gunicorn --paste bioapps/development.ini -b 0.0.0.0:8999 --workers 1 --certfile /etc/ssl/certs/current/webserver.cer --keyfile /etc/ssl/certs/current/private.key.u
[2019-11-20 16:14:27 -0800] [14783] [INFO] Starting gunicorn 20.0.0
[2019-11-20 16:14:27 -0800] [14783] [INFO] Listening at: https://0.0.0.0:8999 (14783)
[2019-11-20 16:14:27 -0800] [14783] [INFO] Using worker: sync
[2019-11-20 16:14:27 -0800] [14798] [INFO] Booting worker with pid: 14798
[2019-11-20 16:16:39,550] INFO [access:342][MainThread] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:8999/session HTTP/1.1" {'username': 'colim', 'password': ''}
[2019-11-20 16:16:39,768] INFO [access:362][MainThread] 10.9.202.54 - - "POST https://bioappsdev02.bcgsc.ca:8999/session HTTP/1.1" 200 639
é¢é£ãããã©ããã¯ããããŸãããã gunicorn 20.0.0
ãšpserve
ã䜿çšããŠãµãŒããŒãèµ·åããã®ã¯ããã®èŠåã衚瀺ãããå¯äžã®å Žåã§ãã
/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/gunicorn/workers/ggevent.py:53: MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ['urllib3.util.ssl_ (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/ssl_.py)', 'urllib3.util (/home/colim/Projects/bioapps/bioapps.api.ssl/centos7venv/lib/python3.6/site-packages/urllib3/util/__init__.py)'].
monkey.patch_all()
@tilgoviå€æŽãã°ã§äœãå€æŽããŸããïŒ
@benoitcGunicornCLIã§ã®PasteDeployãµãŒããŒå®çŸ©ã®ãµããŒãã®åé€ãåŒã³ãããããšæããŸãã ç§ã¯ä»æ¥ãããè¡ãããšãã§ããŸãã
å€æŽãã°ãé¡åçã«å€æŽããŠããæ確ã«ããïŒ20.0ãªãªãŒã¹ã®é倧ãªå€æŽã»ã¯ã·ã§ã³ãäœæããïŒå Žåã§ãåé¡ãããŸãããïŒ
@CorreyLãããããïŒ ãã®ãããªã³ãã³ãã©ã€ã³ã§æå®ããããªãã·ã§ã³ã䜿çšããŠã gunicorn
ã確å®ã«å®è¡ã§ããŸãã gunicorn
ãå®è¡ããã«ã¯ããããæãå®å
šã§å¥œãŸããæ¹æ³ã ãšæããŸãã pserve
ãšã®çµ±åã¯äŸ¿å©ã§ãããããã§åé¡ãçºçããããšãç¥ã£ãŠãããšäŸ¿å©ã§ãã éæšå¥šã«ããã®ãééããªãã£ããšããã®ã§ããã
å€æŽãã°ãé¡åçã«å€æŽããŠããæ確ã«ããïŒ20.0ãªãªãŒã¹ã®é倧ãªå€æŽã»ã¯ã·ã§ã³ãäœæããïŒå Žåã§ãåé¡ãããŸãããïŒ
@tilgoviã¯ãééããªã
@tilgoviä»æ¥ããã®å€æŽãè¿œå ã§ããŸããïŒ 20.0.1ã®ããã«ãããæã£ãŠããã®ã¯ã¯ãŒã«ã ãã:)
c25563fã«1è¡ã®ã¡ã¢ãè¿œå ããŸããã å€æŽãçºçããŠãããããã¥ã¡ã³ãã¯ãã§ã«æŽæ°ãããŠããŸãã ããŸãããã°ããã®ã¡ã¢ãèŠã人ã¯èª°ã§ãããã¥ã¡ã³ããšãããã®åé¡ãèŠã€ããããšãã§ããŸãã ð
@tilgoviããããšã
ããã«ãã£ãŠé©ãã»ã©åœ±é¿ãåãããšããå¥ã®ç¢ºèªãè¿œå ãããã£ãã ãã§ãã ç§ã®å Žåã¯ããã»ã©éèŠã§ã¯ãããŸããã§ããããã¢ããã°ã¬ãŒãåŸã«gunicornãéçºã§èªåãªããŒããåæ¢ããçç±ããã®ä»ã®ãã€ããŒãªåäœã®å€æŽã«ã€ããŠæ··ä¹±ããŸããã ç§ã¯ä»æ¥ãããç解ããããšãã°ããæéãè²»ããã --paste
INIãã¡ã€ã«ã®èšå®ãæ©èœããªããªã£ãããšã«æ°ã¥ããŸãããããã¯ããã®åé¡ãžã®éãèŠã€ããã®ã«åœ¹ç«ã¡ãŸããã
ãããå®è¡å¯èœãã©ããã¯ããããŸããããPasterãã¡ã€ã«ãä»ããŠãµãŒããŒåŒæ°ãèšå®ããããšããŠããããšãæ€åºããå Žåã«gunicornã«èŠåãåºåãããããšã¯å¯èœã§ããããïŒ
æ··ä¹±ããè©«ã³ããŸãã@Deimosã PRã確èªããŸãããããã«è¿œå ããå ·äœçãªèšç»ã¯ãããŸããã
å®éã«--pasteã--configãšäžç·ã«äœ¿çšãããå Žåã¯ã©ãã§ããããã ç§ãã¡ã®å ŽåïŒRhodeCodeïŒã¯ãgunicornæ§æã«ããã¡ã¢ãªç£èŠã®ç¹å¥ãªããžãã¯ã®å€§ããªèŠä»¶ã§ãã
@marcinkuzminskiã¯çæ³çãªãŠãŒã¹ã±ãŒã¹ã§ãã --paste
ãš--config
ã®äž¡æ¹ãæå®ããã ãã§ãã ãã ããgunicornæ§æãã¡ã€ã«ã§ãµãŒããŒãæ§æããããšãæåŸ
ããããããGunicornã¯è²Œãä»ãiniãã¡ã€ã«ã®ããµãŒããŒãã»ã¯ã·ã§ã³ãèªã¿åããŸããã
ããã¯æ®å¿µã§ãã
gunicornãã€ã³ã¹ããŒã©ãŒã§ã客æ§ã«åºè·ããŠããããã¹ãŠã®ããžãã¯ãšæ§æã¯.iniãã¡ã€ã«ã«å§ä»»ãããŠããŸãã ããã¯ãã€ã³ã¿ãŒãããäžã®ã»ãšãã©ã®äŸãPyramidãããžã§ã¯ãã«æå®ããæ¹æ³ã§ããããŸãã
ãã®å€æŽã¯ãããå£ããgunicornããã©ãŒã¯ããŠå ã«æ»ããããžãã¯ãå€æŽããŠæ§æãgunicorn_conf.pyã«å§ä»»ããæ¹ãããããç°¡åã§ã:(
--pasteãªãã·ã§ã³ãç¹å¥ãªãã¬ãã£ãã¯ã¹ã§èªã¿åãããå Žåã¯ã©ãã§ããããã ããšãã°ã-pasteã䜿çšããŠgunicornãèšå®ã§ããŸããããã¬ãã£ãã¯ã¹ãgunicorn.
ã®èšå®ãªãã·ã§ã³ã®ã¿ãèªã¿åãããŸãã
äŸãã°
gunicorn.workers = 2
gunicor.XXX = YYY
--config
ã䜿çšããå¿
èŠã¯ãããŸããã ããŒã¹ãINIãå®å
šã«äœ¿çšã§ããŸãã ãã®ããã«ã¯ã gunicorn
pserve
ã䜿çšããŸãã ããã¥ã¡ã³ããåç
§ããŠãã ããïŒ https ïŒ//docs.gunicorn.org/en/stable/run.html#paste -deployment
å ããããå€æŽã¯ããµãŒããŒãå®è¡ã§ããäžè¬çãªPasteDeploymentCLIãšããŠGunicornã䜿çšããããã®ãµããŒããåé€ããããšã ãã§ããã Gunicornã¯ãäºææ§ã®ãããµãŒããŒèªäœã貌ãä»ããŸãã
ãã®å€æŽã¯ã .ini
ãã¡ã€ã«ãserver
ãããã¯ã§ãŠã§ã€ãã¬ã¹ãŸãã¯ãã®ä»ã®ãµãŒããŒãæå®ããæœåšçãªæ··ä¹±ãåãé€ãããã«è¡ãããŸãããã gunicorn --paste production.ini
ã§å®è¡ãããšå®éã«ã¯äœ¿çšãããŸãããŸã£ãããŠã§ã€ãã¬ã¹ã ãŸãã server:main
以å€ã®ä»£æ¿server
ãããã¯ãæå®ããæ©èœãèŠæ±ããããšããããããŸãã pserve
ã®ãããªå®å
šã«åªããCLIãååšããå Žåã«ãããã®æ©èœã®ãµããŒããç¶æããããšã¯ãæå³ããªãããã«æãããŸããã
gunicorn
CLIã¯ãINIãã¡ã€ã«ããã¢ããªã±ãŒã·ã§ã³å®çŸ©ãèªã¿åãããšãã§ããŸããããµãŒããŒã®æ§æã«ã¯ç¬èªã®æ§æãã¡ã€ã«ã䜿çšããŸãã INIãã¡ã€ã«ã䜿çšããŠGunicornãµãŒããŒãæ§æããå Žåã¯ãã¹ã¯ãªãã/ããã»ã¹ã©ã³ããŒãšããŠå¥ã®ããŒã«ïŒ pserve
ãªã©ïŒã䜿çšããŸãã
ããããç§ã®æåã®ã³ã¡ã³ãã®ããã«ã-configã--pasteãšäžç·ã«äœ¿çšããå¿
èŠããããŸãã
ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ããã¹ãŠãåäžã®æ§æãã¡ã€ã«ïŒ.iniïŒã«ãã£ãŠç®¡çãããŠããŸãã.iniãã¡ã€ã«ã調æŽããã ãã®ã¢ããã°ã¬ãŒã/ãªãŒãã¹ã±ãŒã«ããžãã¯ããããããããŸãã 次ã«ã-configã䜿çšããŠãèšå®ããã«ã¹ã¿ã pythonæ§æãæå®ããŸã
Gunicornã¯Pasteãšäºææ§ããããŸããããã®ããã«æ©èœãå¶éãããŠããã2ã€ã®æ§æãã¡ã€ã«ã䜿çšã§ããªãããã«å埩ã§ããªããšããåé¡ãçºçããŸããããŸããå¥ã®ãã¡ã€ã«ã®æ§æã«ç§»åããããšã¯ãå®éã«ãã©ãŒã¯ãããããæéãããããŸãã Gunicornãšãã®ãã©ãŒã¯ãç¶æããŠããã®åäœãå ã«æ»ããŸãã
ãã®ãã±ããã®è«ççæ ¹æ ã¯ç¥ã£ãŠããŸããã以åã¯gunicornãšãŠã§ã€ãã¬ã¹ãäžç·ã«äœ¿çšããŠããŸãããgunicornbinaryãå®è¡ããããšã¯ååã«æçœã ãšæããŸããIMHOã ããã«ããŠãŒã¶ãŒãå¥ã®åµã䜿çšããŠãããã©ãããæ€åºããŠããããããŒããšã©ãŒã«ããããšãã§ãããšæããŸãã
ç§ãèŠããŠãããªããç§ãã¡ã¯ãã®ãããªäœ¿çšæ³ãèæ
®ããŸããã§ããã ããããæã¡åž°ãããšãã§ããŸã
ãŠãŒã¹ã±ãŒã¹ãšããŠã®ãµããŒãã¯è¯ãããã§ãã æã£ãŠããŠã倧äžå€«ã§ãããã
èŠåããã°ã«èšé²ããŸããïŒ
2020幎10æ16æ¥éææ¥08: 28MarcinKuźmiÅ[email protected]
æžããŸããïŒ
ããããç§ã®æåã®ããã«ã-configã--pasteãšäžç·ã«äœ¿çšããå¿ èŠããããŸã
ã³ã¡ã³ãã
ç§ãã¡ã®ãããžã§ã¯ãã§ã¯ããã¹ãŠãåäžã®æ§æãã¡ã€ã«ïŒ.iniïŒã«ãã£ãŠç®¡çãããŠããŸã
.iniãã¡ã€ã«ã調æŽããã ãã®ã¢ããã°ã¬ãŒã/ãªãŒãã¹ã±ãŒã«ããžãã¯ããããããããŸãã
次ã«ã-configã䜿çšããŠãèšå®ããã«ã¹ã¿ã pythonæ§æãæå®ããŸã
- ã«ã¹ã¿ã ãã¬ãŒåœ¢åŒïŒããã¯æè¡çã«ã¯äžå¯èœã§ã
.iniãã¡ã€ã«ã䜿çšããŠæå®ïŒ- ã¯ãŒã«ãŒã¡ã¢ãªç®¡ç
Gunicornã¯è²Œãä»ãäºæã§ããããã®ããã«æ©èœãå¶éãããŠããŸãã
ãããŠããã¯ç§ãã¡ãå埩ã§ããªãåé¡ãåŒãèµ·ãããŸãããçè«çæ ¹æ ã¯ç¥ã£ãŠããŸããã以åã¯gunicornãšãŠã§ã€ãã¬ã¹ãäžç·ã«äœ¿çšããŠããŸããã
ãããŠãgunicornãã€ããªãå®è¡ããããšã¯ååã«æçœã ãšæããŸããç§èŠãâ
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/benoitc/gunicorn/issues/2169#issuecomment-709838842 ã
ãŸãã¯è³Œèªã解é€ãã
https://github.com/notifications/unsubscribe-auth/AAADRIQR2CLVUOYK6FDY2ZDSK7RZFANCNFSM4JMI65YA
ã>>
ç§ã®æºåž¯ããéä¿¡
å¯èœã§ããã°ãå®éã«å¥ã®è§£æ±ºçãèããŸããã ãŠãã³ãŒã³ãšãã°ã§pserveã䜿çšããå Žåã¯ãæ§æãã¡ã€ã«ã.iniãã¡ã€ã«å ã«èšå®ããããšäŸ¿å©ã§ãã
äŸãã°
use = egg:gunicorn#main
workers = 2
config = /path/to/gunicorn_conf.py
ãããã£ãŠã-config = / path / to/gunicorn_conf.pyãšãŸã£ããåãããã«gunicorn_conf.pyãèªã¿èŸŒãŸããŸãã
ãããã£ãŠãäžèšã¯ç§ãã¡ã«ãšã£ãŠããŸãããã§ãããããããŠããã¯ãã®ãã±ããã®åé¡ã解決ããŠããŸãã ãããå®è£ ããã®ãã©ãã»ã©ç°¡åã§å®è¡å¯èœãããããªãã
ããã§ãªããã°ãgunicornãã€ããªãå®è¡ããŠãããšãã«.iniãã¡ã€ã«ããæ§æãããŒãããæ©èœãããããããšãã§ããã°ãããã¯çŽ æŽãããããšã§ãããããã¯ç§ãã¡ã«å€ãã®æéãçãã§ãããã èŠåããã£ãŠãåé¡ãããŸãã
å¯èœã§ããã°ãå®éã«å¥ã®è§£æ±ºçãèããŸããã ãŠãã³ãŒã³ãšãã°ã§pserveã䜿çšããå Žåã¯ãæ§æãã¡ã€ã«ã.iniãã¡ã€ã«å ã«èšå®ããããšäŸ¿å©ã§ãã
ããã¯æ©èœããã¯ãã§ãããææžåãããŠããŸãã ããã§ãªãå Žåã¯ããã°ãå ±åããŠãã ããã
ããããŸãããããã確èªããŸãã ããããAFAIRã§ã¯ãgunicornãšpserveã®ãã€ããªã®åäœã«ããããªå€æŽããããŸããã æãåºããŠãã ãããgunicorn--pasteã¯.iniãã¡ã€ã«ãã¹ã«ã¢ã¯ã»ã¹ã§ããŸããããgunicorneggã䜿çšããpserveã¯ã¢ã¯ã»ã¹ã§ããŸããã§ããã ããã確èªããå¿ èŠã«å¿ããŠé¢é£ãããã±ãããéããŸãã
æãåèã«ãªãã³ã¡ã³ã
åé¡ãå床éããŠãèªå·±å²ãåœãŠããŸãã ããã§å€æŽãã°ãèªã¿ãããããããã«æŽæ°ããããéããŸãã
ç¹°ãè¿ãã«ãªããŸãããæåã«å€æŽãã°ã§ãããããæ確ã«åŒã³åºããªãã£ãããšããè©«ã³ããŸãã