500 Ошибка при работе Django, Apache2, PostGreSQL Ubuntu 18.04.3 LTS - PullRequest
0 голосов
/ 12 апреля 2020

Извините, если я выгляжу потерянным, но у меня очень мало опыта развертывания веб-приложений, и поиск в Интернете не помогает. Как гласит заголовок, я использую Ubuntu, Apache2, PostgreSQL и Django, - и я постоянно получаю сообщения об ошибках, большинство из которых либо расплывчаты и / или не имеют четких решений. Кроме того, мое невежество по поводу специфических c взаимодействий вызывает любые попытки найти решение, поэтому я буду очень конкретным c.

Установки:

  • apache2 libapache2-mod- wsgi-py3 - для python 3
  • Не могу вспомнить, установил ли я django или он автоматически упакован с моим пакетом PyCharm.
  • PostgreSQL - отлично работает.

Приложение:

  • Это платформа облачных вычислений, поэтому она должна принимать файлы, хранить файлы и рендеринг файлов.
  • Прекрасно работает с подключенным веб-сервером Django.
  • имеет stati c файлов и нуждается в записи в папку мультимедиа

settings.py :

- DEBUG = True
- WSGI_APPLICATION = 'example.wsgi.application'
-DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'example',
        'USER': 'example',
        'PASSWORD': 'example',
        'HOST': 'localhost',
        'PORT': '',

000-default.conf

<VirtualHost *:80>
ServerName FireAnts.localhost
ServerAlias www.FireAnts.localhost
DocumentRoot /var/www/FireAnts
<Directory /var/www/FireAnts/FireAnts>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess FireAnts python-path=/var/www/FireAnts python-home=/var/www/FireAnts/venv
WSGIProcessGroup FireAnts
WSGIScriptAlias / /var/www/FireAnts/FireAnts/wsgi.py
</VirtualHost>

ОШИБКИ, по журналу

  • В настоящее время я получаю сообщение «Модуль не назван» django '".
  • Часто я получаю" заполнить "не реентерабельный - проблема, которая, кажется, имеет миллион возможных решений.
  • Целевой WSGI не может быть загружен как Python модуль.

Я временно заставил работать другой скрипт, удалив все строки, записывающие в файл error.txt - файл, который существует для обоих пакетов и генерирует синтаксические ошибки. По какой-то необъяснимой причине он снова сломался с ошибкой «No module name django». Кроме того, я переместил весь пакет из внешнего каталога в '/ var / www /' (и изменил файл 000-default.conf). это не должно вызывать каких-либо проблем, поскольку виртуальная среда перемещается вместе с пакетом, а база данных все равно должна подключаться извне. Но я предполагаю, что это сгенерировало ошибку 500 раньше, записывая в файл, который больше не имеет разрешений на запись. Может ли моя база данных как-то сгенерировать ошибку (заблокировав соединение)? Если пользователь позже загрузит пакет, он временно запишет в папку мультимедиа. Даже если он еще не написал, это могло сломать это? Нужно ли делать какие-либо дополнительные изменения при перемещении пакета в / var / www directory?. Я понятия не имею, что может быть причиной этих ошибок. Это должна быть ошибка конфигурации apache, потому что она работает с веб-сервером Django и разрывается только с apache2 ...

Извините за беспорядок и отсутствие организации; я просто понятия не имею, где я мог все испортить. - но каждая попытка исправить просто ломает это снова. Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Хорошо, так что я разобрался с ответом. Все было настроено правильно, но произошла недостающая установка с непонятным сообщением об ошибке. Я нашел файл, который генерирует сообщение «populate () не реентерабелен», нашел строку с сообщением об ошибке и дал команду продолжить, заменив «Повышение RuntimeError (« populate () не реентерабелен »)» на "self.app_configs = {}". Вместо получения расплывчатого, неясного ответа в журнале ошибок сообщалось об отсутствии импорта «psycopg2». Я активировал каталог venv и установил psycopg2. После этого все заработало.

0 голосов
/ 12 апреля 2020

Возможно, вы упускаете возможность правильно указать WSGIDaemonProcess в вашей конфигурации по умолчанию. Попробуйте указать как

WSGIDaemonProcess FireAnts python-path=/var/www/FireAnts/venv/path/to/bin/python:/var/www/FireAnts/FireAnts

Где заменить <path/to/> с правильным путем к венве. Вы должны указать полный путь к исполняемому файлу python.

Редактировать файл wsgi.py вашего проекта

/ var / www/FireAnts/FireAnts/wsgi.py:

import os
import sys

from django.core.wsgi import get_wsgi_application

path = '/var/www/FireAnts'
if path not in sys.path:
    sys.path.insert(0, path)

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

application = get_wsgi_application()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...