python - 运行 Django、Apache2、PostGreSQL Ubuntu 18.04.3 LTS 时出现 500 错误
问题描述
抱歉,如果我似乎迷路了,但我很少有部署 Web 应用程序的经验,并且在线搜索无济于事。正如标题所述,我正在运行 Ubuntu、Apache2、PostgreSQL 和 Django,并且我反复收到错误消息,其中大部分要么含糊不清,要么没有明确的解决方案。加上我对特定交互流沙的无知,任何试图找到解决方案的尝试,所以我会非常具体。
安装:
- apache2 libapache2-mod-wsgi-py3 -- 用于 python 3
- 我不记得我是否安装了 django 或者它是否自动与我的 PyCharm 包一起打包。
- 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>
错误,根据日志
- 目前,我得到“没有名为'django'的模块”。
- 我经常得到“填充”不是可重入的——这个问题似乎有百万种可能的解决方案。
- 目标 WSGI 不能作为 Python 模块加载。
我暂时通过删除写入 error.txt 文件的所有行来使另一个脚本工作——该文件同时存在于两个包中并生成语法错误。由于某种无法解释的原因,它再次因“No module name django”失败而中断。此外,我将整个包从外部目录移动到“/var/www/”(并修改了 000-default.conf 文件)。这不应该产生任何问题,因为虚拟环境与包一起移动,并且数据库仍应从外部连接。但我假设这之前通过写入不再具有写入权限的文件生成了 500 错误。我的数据库会以某种方式(通过阻止连接)生成错误吗?如果用户稍后上传一个包,它将临时写入媒体文件夹。虽然还没写,这能打破它吗?将包移动到 /var/www 目录时是否需要进行更多修改?我不知道什么可能会产生这些错误。它一定是 apache 配置错误,因为它适用于 Django 的 Web 服务器,并且只与 apache2 中断...
对不起,混乱和缺乏组织;我只是不知道我在哪里搞砸了。- 但每次尝试的修复都会再次破坏它。我将不胜感激。
解决方案
您可能会错过在默认配置中正确提供 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()
推荐阅读
- c# - 在 Unity 中,LoadRawTextureData() 提供的数据不足错误
- angular - 离子3中意外的结束标签离子列表
- visual-studio - 除非暂停并继续,否则 Visual Studio 中的调试会挂起
- java - Apache spark 的 generated.java 文件位置
- python - 大熊猫堆叠数据框
- c# - SSRS IAuthorizationExtension 从外部源获取用户角色
- matlab - Matlab - 交互式曲面图
- java - 如何解决在类路径资源中定义名称为“entityManagerFactory”的 bean 创建错误?
- vue.js - 在 prestashop 模块中使用 Vue.js
- java - 使用 AsyncTask 读取网站的 html 代码