Задача
Мы используем разные версии 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