плагин gevent uwsgi не загружается в альпийском докере - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь загрузить простой сервер uWSGI в образе док-станции Alpine (3.9). Вот скрипт Python

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

И я пытаюсь запустить его с помощью следующей команды:

uwsgi --plugins http,python3,gevent --http :8081 --uid nobody --gid nobody --wsgi-file hello.py --module hello --master --processes 4 --gevent 2 --gevent-monkey-patch --socket /tmp/uswgi.sock

Однако, каждый раз, когда я пытаюсь это сделать, я получаю эту ошибку:

!!! UNABLE to load uWSGI plugin: Error relocating /usr/lib/uwsgi/gevent_plugin.so: PyInt_FromLong: symbol not found !!!
uwsgi: unrecognized option: gevent
getopt_long() error

Я попытался установить пакет python3-dev, но команда все равно не работает. У кого-нибудь есть идеи, почему это происходит? Вот мой Dockerfile:

FROM alpine:3.9.3

RUN apk add --no-cache --update \
  python3 \
  python3-dev \
  uwsgi \
  uwsgi-python3 \
  uwsgi-http \
  uwsgi-gevent

CMD ["sh"]

1 Ответ

1 голос
/ 08 мая 2019

uwsgi-gevent - это плагин Python 2 uWSGI:
https://pkgs.alpinelinux.org/package/v3.9/main/x86_64/uwsgi-gevent

Для Python 3 вам потребуется uwsgi-gevent3.

Кроме того, вам не хватает пакета py3-gevent для модуля Gevent Python.

В итоге обновлен список пакетов:

RUN apk add --no-cache --update \
  python3 \
  python3-dev \
  py3-gevent \
  uwsgi \
  uwsgi-python3 \
  uwsgi-http \
  uwsgi-gevent3

Плюс, не забудьте использовать плагин gevent3 вместо gevent:

uwsgi --plugins http,python3,gevent3
...