#python #django #ubuntu #apache2 #mod-wsgi
Вопрос:
Я пытаюсь развернуть свое приложение django на apache2, я нахожусь на экземпляре ubuntu AWS ec2. Первоначально я получил фатальную ошибку Python: Py_Initialize: Не удалось получить кодировку локали, поэтому я переключил свой python с 2.7 на 3.6, удалив свой env и запустив новый виртуальный env на 3.6, я также удалил python 2.7 и 3.7 из своего экземпляра. После этого у меня в apache появился модуль без имени «Ошибка Django». Любая помощь ценится за то, что я застрял на некоторое время с этим :).
<VirtualHost *:80>
ServerAdmin webmaster@example.com
DocumentRoot /home/ubuntu/pydjangoenv/myproj
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /static /home/ubuntu/pydjangoenv/myproj/static
<Directory /home/ubuntu/pydjangoenv/myproj/static>
Require all granted
</Directory>
<Directory /home/ubuntu/pydjangoenv/myproj/myproj>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproj python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2
WSGIScriptAlias / /home/ubuntu/pydjangoenv/myproj/myproj/wsgi.py
</VirtualHost>
Кроме того, когда я запускаю pip3, устанавливаю django, мой django включен
Требование уже выполнено: django в /home/ubuntu/pydjangoenv/venv2/lib/python3.6/пакеты для сайтов (3.2.5)
Ответ №1:
Как только вы настроите свой экземпляр EC2, я предположу, что вам нужны серверная и внешняя часть на этом сервере, доступ к экземпляру через shell
. Тогда беги:
Для обновления пакетов из Ubuntu:
sudo apt-get update
Установите Python с помощью:
sudo apt-get install python3.6
Установите pip
с помощью:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
Затем вам нужно установить виртуальную среду, которую вы можете использовать virtualenv
:
pip install virtualenv
Создайте виртуальную env с помощью:
virtualenv mynewvenv
Затем войдите в вену с:
source mynewvnev/bin/activate
Как только вы окажетесь внутри своего vnev, запустите это, чтобы установить Django:
pip install django
Затем я рекомендую загрузить ваш проект Django в GitHub или GitLab, а затем клонировать этот репозиторий.
Очень важно обновить свой settings.py
, особенно ALLOWED_HOSTS
если вы перенаправляете с помощью пользовательского домена:
ALLOWED_HOSTS = ['yourdomain.com',
'www.yourdomain.com',]
Также очень важно при необходимости обновить доступ к БД, если вы используете БД по умолчанию sqlite3
, просто убедитесь, что имя БД, пользователь и пароль совпадают с вашей фактической информацией.
Если вы сделали все вышесказанное правильно, попробуйте обновить WSGI
раздел в вашем config
файле Apache, чтобы он выглядел примерно так:
WSGIPassAuthorization On
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIDaemonProcess yourapp python-home=/usr/local/venvs/yourapp
WSGIProcessGroup DjangoMainAppName
Вполне вероятно, что ошибка находится в этой строке:
WSGIDaemonProcess delta_new python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2
Попробуйте изменить на:
WSGIDaemonProcess delta_new python-path=/home/ubuntu/pydjangoenv/myproj python-home=/home/ubuntu/pydjangoenv/venv2/lib/python3.6/site-packages
Используя точную версию Python.
Вы можете прочитать о том, как правильно настроить config
файл для приложения Django с режимом демона для одного приложения здесь.
Комментарии:
1. Да, после того, как я внес изменения, я вернулся к исходной ошибке: Фатальная ошибка Python: Py_Initialize: Не удалось получить модуль кодировки языкового стандарта. Или: Нет модуля с именем «кодировки»
2. Попробуйте выполнить команды:
unset PYTHONHOME
иunset PYTHONPATH
Ответ №2:
Я смог заставить свой веб-сайт работать через apache, перейдя на python 3.6, создав новую виртуальную среду с python 3.6, переустановив требования, а затем я удалил libapache2-mod-wsgi-py3 с помощью sudo apt-get remove libapache2-mod-wsgi-py3, а затем я снова установил его в своей виртуальной среде python 3.6, а затем веб-сайт перестал работать.