Gunicorn: Pekerja Kustom Menyebabkan Masalah

Dibuat pada 11 Jul 2017  ·  4Komentar  ·  Sumber: benoitc/gunicorn

Halo,

Saya mencoba mengatur pekerja khusus untuk mengambil informasi sertifikat klien dari server dan kemudian memasukkannya ke aplikasi Flask saya seperti:

gunicorn_options.py:

import multiprocessing
import os
from mypackage.client_auth_worker import CustomSyncWorker

def config_dir():
    return os.path.dirname(os.path.realpath(__file__))

bind = "0.0.0.0:8000"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = CustomSyncWorker
timeout = 30
ca_certs = os.path.join(config_dir(), 'ca.cert.pem')
certfile = os.path.join(config_dir(), 'server.cert.pem')
keyfile = os.path.join(config_dir(), 'server.key.pem')
cert_reqs = 2
do_handshake_on_connect = True

custom_auth_worker.py:

from gunicorn.workers.sync import SyncWorker

class CustomSyncWorker(SyncWorker):
    def handle_request(self, listener, req, client, addr):
        subject = dict(client.getpeercert().get('subject')[0])
        headers = dict(req.headers)
        headers['X-USER'] = subject.get('commonName')
        print(headers)
        req.headers = list(headers.items())
        super(CustomSyncWorker, self).handle_request(listener, req, client, addr)

Saya terus mendapatkan pengecualian berikut:

File "/Users/me/.virtualenvs/mypackage/lib/python3.5/site-packages/gunicorn/arbiter.py", line 162, in start
    self.log.info("Using worker: %s", self.cfg.worker_class_str)
  File "/Users/me/.virtualenvs/mypackage/lib/python3.5/site-packages/gunicorn/config.py", line 68, in __getattr__
    raise AttributeError("No configuration setting for: %s" % name)
AttributeError: No configuration setting for: worker_class_str

Saya mencoba beberapa hal untuk memperbaikinya, misalnya, saya mencoba menyetel worker_class_str di file gunicorn_options.py , yang tidak menyelesaikan masalah. Saya kemudian mulai menggali kode paket yang sebenarnya dan saya menemukan bahwa ketika saya memodifikasi file gunicorn/arbiter.py untuk mengomentari baris: self.log.info("Using worker: %s", self.cfg.worker_class_str) semuanya bekerja dengan baik, CustomSyncWorker dimuat dengan baik dan melakukan tugasnya seperti yang seharusnya mengatur header X-USER dan semuanya.

Apakah ini bug? Atau apakah saya hanya melakukan sesuatu yang salah secara drastis? Saya pikir saya tidak boleh memaksakan diri untuk memodifikasi kode secara lokal hanya untuk memaksa semuanya berfungsi ...

Feedback Requested

Komentar yang paling membantu

Saya pikir Anda perlu meneruskan string ke worker_class . Jadi berubah

worker_class = CustomSyncWorker

ke

worker_class = 'mypackage.client_auth_worker.CustomSyncWorker'

akan memecahkan masalah Anda.

Semua 4 komentar

Saya pikir Anda perlu meneruskan string ke worker_class . Jadi berubah

worker_class = CustomSyncWorker

ke

worker_class = 'mypackage.client_auth_worker.CustomSyncWorker'

akan memecahkan masalah Anda.

Dan perhatikan bahwa ini sudah didokumentasikan di http://docs.gunicorn.org/en/stable/settings.html#worker -class

Secara opsional, Anda dapat menyediakan pekerja Anda sendiri dengan memberikan Gunicorn jalur Python ke subkelas gunicorn.workers.base.Worker. Sintaks alternatif ini akan memuat kelas gevent: gunicorn.workers.ggevent.GeventWorker.

Tentu saja, kami selalu dapat meningkatkan dokumentasi jika Anda memiliki saran yang lebih baik.

Terima kasih atas laporannya!

Saya yakin saya telah mencobanya, dan itu tidak berhasil, namun, saya tidak yakin dan saya mungkin telah menulis string secara berbeda (seperti dalam format "mypackage.client_auth_worker:CustomSyncWorker" ). Saya harus memeriksa ketika saya pulang nanti hari ini.

Selain itu, saya akan merekomendasikan untuk memasukkan contoh langsung ke dalam dokumentasi atau setidaknya di tempat lain (di mana pun menurut Anda tepat) hanya karena saya telah melihat dokumentasi itu dan tidak jelas bahwa itulah yang seharusnya saya lakukan dalam kasus file konfigurasi python. Saya akhirnya melakukan banyak percobaan dan kesalahan yang mengakibatkan saya mendapatkan versi yang berfungsi yang saya posting setelah mengomentari hasil cetakan.

Terima kasih telah kembali padaku begitu cepat!

Oke, dikonfirmasi, itu berhasil. Terima kasih atas bantuannya!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

benoitc picture benoitc  ·  43Komentar

jezdez picture jezdez  ·  90Komentar

kozmaz87 picture kozmaz87  ·  34Komentar

zt-initech picture zt-initech  ·  57Komentar

benoitc picture benoitc  ·  34Komentar