<p>gunicorn 20.0.0: - قم بلصق الوسائط التي لا تكتشف ضمن [server: main]</p>

تم إنشاؤها على ١٢ نوفمبر ٢٠١٩  ·  31تعليقات  ·  مصدر: benoitc/gunicorn

مرحبًا المشرفون على gunicorn ،

بيئة:

  • python 3.6.1
  • pyramid==1.9.2

في 12 سبتمبر 2019 ، قمت بإعادة تشكيل الطريقة التي تم بها نشر خادم داخلي pyramid ، واستبدل waitress بـ gunicorn ، وفقًا لاقتراح Stack Overflow:

https://stackoverflow.com/a/26872261/10491481

في الوقت الذي تم فيه إصدار العلاقات العامة الداخلية ، كان أحدث إصدار gunicorn 19.9.0.

لقد طُلب مني مراجعة التنفيذ مرة أخرى اليوم ، وتحديدًا لاختبار التغيير على خوادم التطوير والإنتاج لدينا CentOS 6.5 . قررت أن أفعل ذلك باستخدام git clone جديد من قاعدة الرموز الخاصة بنا.

في الوقت الذي قمت فيه بعمل PR ، لم أحدد إصدارًا من gunicorn في setup.py ، لذلك عندما قمت بتشغيل pip install اليوم ، تم تنزيله (بشكل غير متوقع) وتثبيته gunicorn==20.0.0 .

لم يكن من الواضح سبب عدم ظهور إعداداتي في development.ini تحت [server:main] عند بدء التشغيل.

للتوضيح ، بالإعدادات التالية في 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

ملحوظة بين المخرجين:

  • لم يعد يتم النشر باستخدام SSL (لاحظ كيف أن ناتج gunicorn 20.0.0 هو http )
  • لم تعد الوسيطة host صحيحة (باستخدام الافتراضي 127.0.0.1 بدلاً من 0.0.0.0 )
  • لم تعد الوسيطة port صحيحة (باستخدام الافتراضي 8000 بدلاً من 9090 )

لقد بحثت في سجل التغيير مقابل 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

أي مساعدة في فهم هذه المسألة سيكون موضع تقدير كبير.

يرجى إعلامي إذا كان هناك المزيد من التفاصيل التي يمكنني تقديمها حول بيئتي لجعل هذا قابلاً للتكرار.

شكرا،
كوري

التعليق الأكثر فائدة

سأعيد فتح المشكلة والتخصيص الذاتي. سأغلقه عندما أقوم بتحديث سجل التغيير ليكون أكثر وضوحًا هنا.

مرة أخرى ، أعتذر عن عدم ذكرها بشكل أوضح في التغيير في البداية.

ال 31 كومينتر

اعتذاري. إدخال سجل التغيير يقول فقط "تبسيط وثائق نشر اللصق" ، وكان يجب أن أساعد في إعداد إدخال أخبار أفضل هنا.

العلاقات العامة لهذا هنا: https://github.com/benoitc/gunicorn/pull/1957

في السابق ، كنا قد أوقفنا استخدام use = egg:gunicorn#main لكن ذلك لم يعد مهملاً. يهدف التغيير إلى توضيح دور Gunicorn في بيئة متوافقة مع Paste Deploy.

هناك خياران لاستخدام Gunicorn بهذا النمط .ini ملف.

الخيار الأول هو استخدام CLI gunicorn . عند القيام بذلك ، يجب عليك استخدام علامات CLI الخاصة بـ Gunicorn أو وحدة التكوين الخاصة بـ Gunicorn (الافتراضي gunicorn.conf.py ) لتكوين وسيطات الخادم. Gunicorn Bind هو المقبس ، ويدير إعادة التحميل ، ويكتب ملفات PID وما إلى ذلك. يمكن لـ Gunicorn استخدام قسم app في .ini لتكوين التطبيق القابل للاستدعاء.

الخيار الثاني هو استخدام عداء Paste Script مثل pserve . في هذه الحالة ، يدير عداء البرنامج النصي هذا إعادة التحميل ويكتب ملفات PID وما إلى ذلك. يجب أن تظل معظم الخيارات الأخرى تعمل ، ولكن لاستخدام كتلة server لملفك .ini تحتاج إلى استدعاء عداء نصي متوافق مع اللصق. لم يعد Gunicorn عداء سيناريو من هذا القبيل.

اسمحوا لي أن أعرف إذا كان بإمكاني إضافة المزيد من الوضوح.

في حالتك ، يجب أن تكون قادرًا على المتابعة كما كان من قبل ، ولكن استخدم pserve raither من gunicorn لبدء تطبيقك. يمكن بعد ذلك أن تكون جميع تكوينات الخادم لـ Gunicorn في كتلة server الخاصة بك ، كما يبدو أنك فعلت ذلك بالفعل.

كان السلوك السابق محيرًا على الأرجح لأنه سمح بتحديد الخيارات في سطر الأوامر التي قد تتعارض مع الملف. لدينا أيضًا طلبات لإضافة القدرة على تحديد متغيرات التكوين للاستيفاء في ملف .ini وتحديد كتل server مختلفة (بالإضافة إلى كتل app مختلفة). نتيجةً لذلك ، تم اتخاذ قرار بإيقاف استخدام Gunicorn باعتباره عداء Paste _server_ بدلاً من محاولة إضافة دعم لجميع هذه الميزات. يدعم Gunicorn CLI الآن قراءة ملف Paste Deploy .ini لإنشاء تطبيق ، ولكن استخدام كتل server يترك لأدوات مخصصة في هذا النظام البيئي.

في حالتك ، يجب أن تكون قادرًا على المتابعة كما كان من قبل ، ولكن استخدم pserve raither من gunicorn لبدء تطبيقك.

شكرا للاستجابة السريعة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

وهو أمر رائع ، نظرًا لأن جزءًا من العلاقات العامة الداخلية التي فتحتها تضمن الاضطرار إلى تغيير الأمر pserve إلى gunicorn ، وهو الأمر الذي كنت حذراً منه بعض الشيء لأنني لست المطور الأصلي لدينا خادم API الداخلي.

هذا يحل مشاكلي ، لا تتردد في إغلاق هذه المشكلة =)

شكرا،
كوري

ملاحظة أخيرة ، ثم أعتقد أنني أضفت كل التفاصيل التي يمكنني تذكرها. من المحتمل أن يكون الأمر محيرًا أن استدعاء gunicorn --paste production.ini سيستخدم Gunicorn كخادم _ حتى إذا كانت الكتلة server تحدد شيئًا آخر غير egg:gunicorn#main _!

نظرًا لأن Gunicorn هو في الأساس خادم ومدير عمليات ، فليس من المنطقي أن يكون Gunicorn عبارة عن CLI عام لاستدعاء الخوادم المتوافقة مع Paste التعسفية. بدلاً من ذلك ، Gunicorn هو خادم يدعم تطبيقات Paste Deploy وهو خادم متوافق مع Paste. إنه _not_ عداء Paste Script CLI ، بالرغم من ذلك!

فتحت مشكلة في كتاب طبخ الهرم لهذا: https://github.com/Pylons/pyramid_cookbook/issues/222

اعتقدت أنني قمت بتوثيق هذا بدقة في Gunicorn نفسها ، لكنني لم أتمكن من العثور على المرجع في البداية. إنه هنا: http://docs.gunicorn.org/en/stable/run.html#paste -deployment

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

لم يتم إجراء أي تغييرات على development.ini بين gunicorn 20.0.0 و gunicorn 19.9.0 .

ومن المثير للاهتمام أنه يمكننا إيقاف الخطأ بـ 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 ماذا ستغير في سجل التغيير؟

benoitc أود استدعاء إزالة دعم تعريفات خادم Paste Deploy في Gunicorn CLI. أستطيع أن أفعل هذا اليوم.

هل من المقبول أن أقوم بتعديل سجل التغيير بأثر رجعي لجعله أكثر وضوحًا (إجراء قسم التغييرات الفاصلة في الإصدار 20.0)؟

تضمين التغريدة يمكنك بالتأكيد تشغيل gunicorn مع الخيارات المحددة في سطر الأوامر من هذا القبيل. أعتقد أن هذه هي الطريقة المفضلة والأكثر أمانًا لتشغيل gunicorn . يعد التكامل مع pserve ملائمًا ، ولكن من الجيد معرفة أنه يسبب مشكلات هنا. آمل ألا أخطئ في عدم إهماله.

هل من المقبول أن أقوم بتعديل سجل التغيير بأثر رجعي لجعله أكثر وضوحًا (إجراء قسم التغييرات الفاصلة في الإصدار 20.0)؟

tilgovi نعم بالتأكيد

tilgovi هل يمكنك إضافة هذا التغيير اليوم؟ سيكون من الرائع الحصول عليه مقابل 20.0.1 :)

تمت إضافة ملاحظة سطر واحد إلى c25563f. تم تحديث الوثائق بالفعل منذ حدوث التغيير. نأمل أن يتمكن أي شخص يرى هذه الملاحظة من العثور على الوثائق وهذه المشكلات. 😅

tilgovi شكرا

أردت فقط إضافة تأكيد آخر للتأثر بشكل مفاجئ بهذا. لم يكن ذلك مهمًا جدًا في حالتي ، لكنني كنت في حيرة من أمري حول سبب توقف برنامج gunicorn عن إعادة التحميل التلقائي في dev منذ الترقية بالإضافة إلى بعض التغييرات السلوكية البسيطة الأخرى. قضيت بعض الوقت في محاولة اكتشاف ذلك اليوم وأدركت أن الإعدادات الموجودة في ملفات INI --paste لم تعد تعمل ، مما ساعدني في إيجاد طريقي لحل هذه المشكلة.

ليس لدي أي فكرة عما إذا كان هذا ممكنًا ، ولكن هل من الممكن أن يكون لديك إخراج gunicorn تحذير إذا اكتشف أنك ما زلت تحاول تعيين وسيطات الخادم من خلال ملف Paster؟

اعتذاري عن الانقطاع ،Deimos. سأراجع العلاقات العامة ، لكن ليس لدي خطط محددة لإضافة المزيد هنا.

ماذا عن حالة تريد بالفعل استخدام - معجون مع --config؟ وهو في حالتنا (RhodeCode) مطلب كبير للمنطق الخاص لمراقبة الذاكرة الذي حصلنا عليه في التكوين gunicorn.

marcinkuzminski هذه هي حالة الاستخدام المثالية. فقط حدد كلاً من --paste و --config . ومع ذلك ، لن يقرأ Gunicorn قسم "الخادم" من ملف لصق ini لأن التوقع هو أنك ستقوم بتكوين الخادم في ملف تكوين gunicorn.

هذا مؤسف.

نقوم بشحن gunicorn إلى العملاء في برنامج التثبيت ، وتم تفويض كل المنطق والتكوين إلى ملفات .ini. هذه هي الطريقة التي تحدد بها معظم الأمثلة عبر الإنترنت لمشاريع الهرم.

هذا التغيير يكسر ذلك ، وربما يكون من الأسهل بالنسبة لنا تفرع gunicorn لإعادة ذلك ، ثم تغيير المنطق وتكوين التفويض إلى gunicorn_conf.py :(

ماذا لو قرأت خيارات اللصق ببادئة خاصة. على سبيل المثال ، يمكنك تكوين برنامج gunicorn باستخدام --paste ولكنه سيقرأ فقط خيارات التكوين التي ستبدأ بـ gunicorn.

على سبيل المثال

gunicorn.workers = 2
gunicor.XXX = YYY

لا تحتاج إلى استخدام --config . يمكنك استخدام معجون INI بالكامل. لذلك استخدم pserve بدلاً من gunicorn . راجع الوثائق: https://docs.gunicorn.org/en/stable/run.html#paste -deployment

كان التغيير الذي تم إجراؤه لإزالة الدعم لاستخدام Gunicorn باعتباره CLI Paste Deployment العام الذي يمكنه تشغيل الخوادم. Gunicorn لا يزال a_ لصق الخادم نفسه المتوافق.

تم إجراء هذا التغيير لإزالة الالتباس المحتمل حيث يحدد ملف .ini نادلة ، أو أي خادم آخر ، في كتلة server الخاصة به ، ولكن تشغيله باستخدام gunicorn --paste production.ini لن يتم استخدامه في الواقع نادلة على الإطلاق. كثيرًا ما يطلب الأشخاص أيضًا القدرة على تحديد مجموعة بديلة server بخلاف server:main . لا يبدو أن الحفاظ على دعم هذه الميزات عند وجود CLIs جيدة تمامًا مثل pserve لهذا الأمر غير منطقي.

يمكن لـ gunicorn CLI قراءة تعريف التطبيق من ملف INI ، لكنه يستخدم ملف التكوين الخاص به لتكوين الخادم. استخدم أداة أخرى (مثل pserve ) كبرنامج نصي / عداء للعملية إذا كنت تريد استخدام ملف INI لتكوين خادم Gunicorn.

ولكن علينا استخدام --config مع - لصق ، حسب تعليقي الأول.
في مشروعنا ، تتم إدارة كل شيء بواسطة ملف تكوين واحد (.ini) هناك الكثير من منطق الترقية / مقياس تلقائي الذي يضبط فقط ملف .ini. ثم نستخدم أيضًا --config لتحديد تهيئة Python المخصصة التي تعين

  • تنسيق مسجل مخصص (لا يمكن تحديد هذا تقنيًا باستخدام ملف .ini)
  • إدارة ذاكرة العامل (كود Python)

Gunicorn متوافق مع اللصق ، لكن الوظائف محدودة بهذه الطريقة ، وقد خلقت مشكلة بالنسبة لنا لا يمكننا التعافي منها لأنه لا يمكننا الحصول على ملفي تكوين ، كما أن الانتقال إلى التهيئة في ملف آخر يعد مزيدًا من العمل ثم في الواقع Gunicorn والحفاظ على تلك الشوكة فقط لإعادة هذا السلوك.

أعرف الأساس المنطقي لهذه التذكرة ، لكننا اعتدنا استخدام gunicorn والنادلة معًا ، وأعتقد أن تشغيل gunicorn binary واضح بما فيه الكفاية ، IMHO. بالإضافة إلى ذلك ، أعتقد أنه يمكنك حتى اكتشاف ما إذا كان المستخدمون يستخدمون بيضة مختلفة وتجعل ذلك خطأً صعبًا.

لم نفكر في مثل هذا الاستخدام إذا كنت أتذكر. ربما يمكننا العودة
دعمها لأن حالة الاستخدام تبدو جيدة. هل سيكون من الجيد أن يكون لديك ملف
تحذير تسجيل لذلك؟

يوم الجمعة 16 أكتوبر 2020 الساعة 08:28 Marcin Kuźmiński [email protected]
كتب:

لكن يتعين علينا استخدام --config مع - لصق ، وفقًا لما ورد في 1 st
تعليق.
في مشروعنا ، تتم إدارة كل شيء بواسطة ملف تكوين واحد (.ini)
هناك الكثير من منطق الترقية / مقياس تلقائي يقوم فقط بضبط ملف .ini.
ثم نستخدم أيضًا --config لتحديد تهيئة Python المخصصة التي تعين

  • تنسيق مسجل مخصص (هذا من الناحية الفنية لا يمكن أن يكون
    محدد باستخدام ملف .ini)
  • إدارة ذاكرة العامل

Gunicorn متوافق مع اللصق ، لكن الوظائف محدودة بهذه الطريقة ،
وتسبب لنا في مشكلة لا يمكننا التعافي منها.

أنا أعرف الأساس المنطقي ، لكننا اعتدنا استخدام البونيكورن والنادلة معًا ،
وأعتقد أن تشغيل برنامج gunicorn binary واضح بما فيه الكفاية ، IMHO.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/benoitc/gunicorn/issues/2169#issuecomment-709838842 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AAADRIQR2CLVUOYK6FDY2ZDSK7RZFANCNFSM4JMI65YA
.

>

مرسلة من هاتفي المحمول

لقد فكرت بالفعل في حل آخر إذا كان ذلك ممكنًا. عند استخدام pserve مع unicorn egg ، سيكون من الجيد أيضًا تعيين ملف التكوين داخل ملف .ini.

على سبيل المثال

use = egg:gunicorn#main
workers = 2
config = /path/to/gunicorn_conf.py

لذلك سيتم تحميل gunicorn_conf.py تمامًا مثل --config = / path / to / gunicorn_conf.py يفعل

إذن ، ما سبق سيعمل معنا ، كما أنه يحل مشكلة هذه البطاقة. لست متأكدًا من مدى سهولة وإمكانية تنفيذ ذلك.

خلاف ذلك ، إذا كان بإمكانك إحضار وظيفة تحميل التكوين من ملف .ini عند تشغيل برنامج gunicorn binary ، فسيكون ذلك رائعًا ، وسيوفر لنا الكثير من المتاعب. وجود تحذير حول ذلك ليس مشكلة

لقد فكرت بالفعل في حل آخر إذا كان ذلك ممكنًا. عند استخدام pserve مع unicorn egg ، سيكون من الجيد أيضًا تعيين ملف التكوين داخل ملف .ini.

يجب أن يعمل وموثق. إذا لم يحدث ذلك ، يرجى تقديم خطأ!

حسنًا ، سوف نتحقق من هذا. لكن AFAIR كانت هناك تغييرات طفيفة في كيفية عمل ثنائيات gunicorn و pserve. إذا كنت أتذكر ، فإن gunicorn --paste كان له حق الوصول إلى مسار ملف .ini ، بينما لم يفعل pserve باستخدام gunicorn egg. سوف نتحقق من ذلك ونفتح تذكرة ذات صلة إذا لزم الأمر.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات