uWSGI: неявный плагин запрашивал nolang - PullRequest
1 голос
/ 10 марта 2019

Задача

Мы используем разные версии Python с uWSGI уже несколько дней. Нам удалось заставить это работать. (Веб-сайты снова работают.) Но мы получаем ошибку в наших журналах (systemctl status uwsgi-emperor.service):

   Loaded: loaded (/etc/uwsgi/uwsgi-emperor.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-03-08 06:55:08 CET; 8min ago
  Process: 28501 ExecStart=/usr/local/bin/uwsgi_nolang --ini /etc/uwsgi/emperor.ini --emperor-pidfile /run/uwsgi/emperor.pid --plugins-dir /usr/lib/uwsgi/plugins (code=exited, st
  Process: 28497 ExecStartPre=/bin/bash -c mkdir -p /run/uwsgi; chown www-data:root /run/uwsgi (code=exited, status=0/SUCCESS)
 Main PID: 28505 (uwsgi_nolang)
   Status: "The Emperor is governing 5 vassals"
    Tasks: 19 (limit: 4915)
   Memory: 586.2M
      CPU: 1min 1.165s
   CGroup: /system.slice/uwsgi-emperor.service
           ├─28504 /usr/local/bin/uwsgi_nolang --ini /etc/uwsgi/emperor.ini --emperor-pidfile /run/uwsgi/emperor.pid --plugins-dir /usr/lib/uwsgi/plugins
           ├─28505 /usr/local/bin/uwsgi_nolang --ini /etc/uwsgi/emperor.ini --emperor-pidfile /run/uwsgi/emperor.pid --plugins-dir /usr/lib/uwsgi/plugins
           ├─28506 /usr/local/bin/uwsgi_nolang --ini /etc/uwsgi/vassals/site1.ini --include /etc/uwsgi/vassals-common.ini
           ...

systemd[1]: Starting uWSGI Emperor service...
uwsgi_nolang[28501]: [uwsgi] implicit plugin requested nolang
uwsgi_nolang[28501]: open("./nolang_plugin.so"): No such file or directory [core/utils.c line 3724]
uwsgi_nolang[28501]: !!! UNABLE to load uWSGI plugin: ./nolang_plugin.so: cannot open shared object file: No such file or directory !!!
uwsgi_nolang[28501]: [uWSGI] getting INI configuration from /etc/uwsgi/emperor.ini

Я не мог найти nolang_plugin.so нигде. Если вы воспользуетесь Google, вы получите только полные результаты, которые не помогли.

Я также проверил, что нам не требуется plugin = nolang или что-то подобное в наших конфигурационных файлах. (Но в логах написано, что этот плагин запрашивается неявно в любом случае.)

Установка

Наша система Python версии 3.5. Я установил Python 3.6 с pyenv: env CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.8. --enable-shared необходим, чтобы иметь возможность создать плагин uWSGI с ним. (Должен ли я установить его с env PYTHON_CFLAGS=-fPIC pyenv install 3.6.8 вместо этого, поскольку этот ответ говорит? Потому что сообщение об ошибке указывало мне на повторную компиляцию Python с этими флагами, но я тогда не знал о PYTHON_CFLAGS.)

Затем мы следовали этим официальным инструкциям для компиляции uWSGI и плагинов для Python 3.5 и 3.6.

т.е. скомпилируйте uWSGI с make PROFILE=nolang, а затем скомпилируйте плагины:

./uwsgi --build-plugin "plugins/python python35"
pyenv local 3.6.8
./uwsgi --build-plugin "plugins/python python36"

(Мы переименовали скомпилированный uwsgi исполняемый файл в uwsgi_nolang.)

Окружающая среда

  • Debian 4.9.130-2
  • pyenv 1.2.9
  • uWSGI 2.0.18
  • Nginx
...