首页 > 解决方案 > 运行 Django、Apache2、PostGreSQL Ubuntu 18.04.3 LTS 时出现 500 错误

问题描述

抱歉,如果我似乎迷路了,但我很少有部署 Web 应用程序的经验,并且在线搜索无济于事。正如标题所述,我正在运行 Ubuntu、Apache2、PostgreSQL 和 Django,并且我反复收到错误消息,其中大部分要么含糊不清,要么没有明确的解决方案。加上我对特定交互流沙的无知,任何试图找到解决方案的尝试,所以我会非常具体。

安装:

应用程序:

设置.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>

错误,根据日志

我暂时通过删除写入 error.txt 文件的所有行来使另一个脚本工作——该文件同时存在于两个包中并生成语法错误。由于某种无法解释的原因,它再次因“No module name django”失败而中断。此外,我将整个包从外部目录移动到“/var/www/”(并修改了 000-default.conf 文件)。这不应该产生任何问题,因为虚拟环境与包一起移动,并且数据库仍应从外部连接。但我假设这之前通过写入不再具有写入权限的文件生成了 500 错误。我的数据库会以某种方式(通过阻止连接)生成错误吗?如果用户稍后上传一个包,它将临时写入媒体文件夹。虽然还没写,这能打破它吗?将包移动到 /var/www 目录时是否需要进行更多修改?我不知道什么可能会产生这些错误。它一定是 apache 配置错误,因为它适用于 Django 的 Web 服务器,并且只与 apache2 中断...

对不起,混乱和缺乏组织;我只是不知道我在哪里搞砸了。- 但每次尝试的修复都会再次破坏它。我将不胜感激。

标签: pythondjangopostgresqlapache2

解决方案


您可能会错过在默认配置中正确提供 WSGIDaemonProcess。尝试给予

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

在哪里替换<path/to/>为您的 venv 的正确路径。您必须提供 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()

推荐阅读