развернуть приложение django с pipenv на apache - PullRequest
0 голосов
/ 22 мая 2018

Я создал веб-приложение на Python в Django 2.0, используя pipenv virtualenv

Теперь я должен разместить его на сервере Apache.Я установил libapache2-mod-wsgi-py3 и python-setuptools на сервере.

Структура моего приложения похожа на

myapp_dir
 |- myapp
    |- settings
       |- __init__.py
       |- production.py
    |- __init__.py
    |- urls.py
    |- wsgi.py
 |- otherapp
 |- templates
 |- static_my_project
 |- manage.py
 |- Pipfile
 |- Pipfile.lock

путь приложения для установки

/home/user/app.application.com/

Я переместил все файлы в каталог и установил все зависимости из Pipfile, запустив в каталоге

pipenv install

Это позволило создать virtualenv и установить все необходимые модули и путь pipenv --venvдает

# pipenv --venv
/home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_

Моя VirtualHost конфигурация выглядит как

ServerName app.application.com
ServerAlias app.application.com

ErrorLog /home/user/error.log
CustomLog /home/user/custom.log combined

Alias /static /home/user/app.application.com/static_my_project
<Directory /home/user/app.application.com/static_my_project>
    Require all granted
</Directory>

<Directory /home/user/app.application.com/pricearbitrase>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

WSGIScriptAlias / /home/user/app.application.com/myapp/wsgi.py

VirtualInclude содержит

<IfModule mod_wsgi>

    WSGIPythonHome /home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_

</IfModule>

Но при доступе http://app.application.com это дает Internal server error и сгенерированный файл журнала содержит

[wsgi:error] [pid 60730] mod_wsgi (pid=60730): Target WSGI script '/home/amzitrage/app.amzitrage.com/pricearbitrase/wsgi.py' cannot be loaded as Python module.
[wsgi:error] [pid 60730] mod_wsgi (pid=60730): Exception occurred processing WSGI script '/home/amzitrage/app.amzitrage.com/pricearbitrase/wsgi.py'.
[wsgi:error] [pid 60730] Traceback (most recent call last):
[wsgi:error] [pid 60730]   File "/home/amzitrage/app.amzitrage.com/pricearbitrase/wsgi.py", line 12, in <module>
[wsgi:error] [pid 60730]     from django.core.wsgi import get_wsgi_application
[wsgi:error] [pid 60730] ImportError: No module named django.core.wsgi

Изменить 2

app / wsgi.py изменен wsgi.py файл вактивировать virtual environment

activate_this = '/home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_/bin/activate_this.py'
exec(compile(open(activate_this,"rb").read(),activate_this, 'exec'), dict(__file__=activate_this))

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings")

application = get_wsgi_application()

Также ls -l /path_to_pipenv_venv/bin дает

enter image description here

1 Ответ

0 голосов
/ 19 августа 2018

Прежде всего я сделал символическую ссылку на pipenv virtualenv на myapp_dir/venv просто для удобства при использовании в файлах apache.Основная проблема, с которой я столкнулся, - это разрешения.

Если ваш путь к virtualenv равен /home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_, попробуйте следующее:

sudo -u www-data cat /home/user/.local/share/virtualenvs/app.application.com-IuTkL8w_/bin/activate_this.py`

Где www-data - ваш пользователь apache.

Если вам отказано в разрешении, это, вероятно, та же проблема.Просто попробуйте изменить права доступа ~/.local и ~/.local/share, чтобы процесс apache мог получить к ним доступ.

Просто имейте в виду, что это установка для разработки, и в производстве я бы не использовал pipenv.Я просто сгенерировал бы requirements.txt и настроил бы обычное virtualenv или использовал gunicorn или что-то подобное.

...