Невозможно запустить django wsgi с виртуальной средой - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь запустить приложение django с apache2 с помощью wsgi, но, похоже, не удается настроить использование виртуальной среды.

Для установки mod_wsgi Я следовал Служить Python 3.7 с mod_wsgi в Ubuntu 16 , поскольку я использую python3 .7.

Я создал виртуальную среду с virtualenv -p python3.7 venv. Использование виртуальной среды вручную с python manage.py runserver работает и запускает сервер, как и ожидалось.

Для запуска с apache2 я настроил my-app.conf с:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@example.com

    ProxyPass / http://0.0.0.0:8000/
    ProxyPassReverse / http://127.0.0.1:8000/

    <Directory /home/path/to/project/static>
        Require all granted
    </Directory>

    <Directory /home/path/to/venv/>
        Require all granted
    </Directory>

    <Directory /home/path/to/project/server>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess project \
    python-home=/home/path/to/venv/ \
    python-path=/home/path/to/project/server/

    WSGIProcessGroup project

    WSGIScriptAlias /project /home/path/to/project/server/wsgi.py \
    process-group=example.com \
    application-group=%{GLOBAL}


    Alias /static/ /home/path/to/project/static/

    ErrorLog /var/log/apache2/mysite-error.log
    LogLevel warn
    CustomLog /var/log/apache2/mysite-access.log combined

    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

и my-app-ssl.conf с:

<IfModule mod_ssl.c>
<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com

  Redirect permanent / https://example.com/

</VirtualHost>
</IfModule>

Я получаю сообщение об ошибке: ImportError: No module named 'django'

, которое основано на неправильной установке venv. Я добавил некоторый код в wsgi.py:

for k in sorted(os.environ.keys()):
        v = os.environ[k]
        print ('%-30s %s' % (k,v[:70]))

и, очевидно, вижу, что он не использует виртуальную среду по сравнению с ручным запуском приложения с помощью virtualenv.

Что плохого в моей настройке, что она не использует виртуальную среду?

1 Ответ

0 голосов
/ 29 января 2020

Итак, наконец-то я нашел решение. Проблема заключалась в том, что модуль mod_wsgi был собран с Python3 .5, а виртуальная среда использовала Python3 .7.

Ручная сборка mod_wsgi, как описано здесь Руководство по установке Mod wsgi и компоновка правильный как описано здесь решил проблему

...