uwsgi в virtualenv, но attach-daemon для django не получает venv

#django #virtualenv #uwsgi #mailman

#django #virtualenv #uwsgi #почтальон

Вопрос:

Я создаю проект django (mailman3) и получаю к нему доступ с помощью uwsgi. У меня он успешно запускается при запуске uwsgi в virtualenv из командной строки.

Я пытаюсь создать службу systemd для управления uwsgi. Он успешно загружает виртуальную среду для uwsgi и запускается. Но когда он пытается запустить процесс django с помощью attach-daemon, управляйте.py не может найти модуль django, т. Е. Он не получает виртуальную среду.

В файле /etc/uwsgi.ini у меня есть:

 virtualenv = /opt/mailman/venv
chdir = /opt/mailman/mailman-suite/mailman-suite_project
attach-daemon = ./manage.py qcluster
 

Служба systemd имеет:

 ExecStart=/opt/mailman/venv/bin/uwsgi --ini /etc/uwsgi.ini
 

Когда systemd запускает службу, мой журнал ошибок сообщает:

 [...]
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x558c5945bc30 pid: 15392 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 15392)
spawned uWSGI worker 1 (pid: 15416, cores: 2)
Traceback (most recent call last):
  File "./manage.py", line 8, in <module>
    from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'
 

Ответ №1:

Вот кусочек головоломки:

Он работал локально с активным virtualenv. Но при запуске systemd, даже с использованием uwsgi из virtualenv, процесс attach-daemon не унаследует virtualenv.

Изменение строки конфигурации на следующую включает virtualenv:

 attach-daemon = /opt/mailman/venv/bin/python3 ./manage.py qcluster