500运行Django、Apache2、PostGreSQL Ubuntu 18.04.3 LTS时出错

2024-10-06 12:25:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

安装:

  • apache2 libapache2-mod-wsgi-py3——用于python 3
  • 我不记得我是否安装了django,或者它是否与我的PyCharm包一起自动打包
  • PostgreSQL-工作正常

申请书:

  • 它是一个云计算平台,因此需要接收文件、存储文件和渲染文件
  • 与Django的web服务器连接时工作良好
  • 有静态文件,需要写入媒体文件夹

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文件的所有行,我临时获得了另一个脚本,该文件存在于两个包中并生成语法错误。由于某些无法解释的原因,它再次出现“无模块名django”故障。另外,我将整个包从外部目录移动到了“/var/www/”(并修改了000-default.conf文件)。这不会产生任何问题,因为虚拟环境与包一起运行,数据库仍然应该从外部连接。但是我假设这之前通过写入一个不再具有写入权限的文件生成了500错误。我的数据库是否会以某种方式(通过阻止连接)生成错误?如果用户稍后上载包,它将临时写入媒体文件夹。即使它还没有写出来,这会打破它吗?将包移动到/var/www目录时是否需要进行更多修改?我不知道是什么导致了这些错误。这一定是apache配置错误,因为它与Django的web服务器一起工作,只与apache2中断

为混乱和缺乏组织感到抱歉;我只是不知道我在哪里会搞砸但每次尝试修复都会再次破坏它。我将感谢任何和所有的帮助


Tags: 模块文件djangopyweblocalhostdefaultwsgi
2条回答

好吧,我找到了答案。 所有配置都是正确的,但缺少安装,错误消息不清楚。 我找到了生成“populate()不可重入”消息的文件,找到了提供错误消息的行,并指示它继续,将“raise RuntimeError(“populate()不可重入”)”替换为“self.app_configs={}”。错误日志没有收到含糊不清的答案,而是报告缺少“psycopg2”导入。我激活了venv目录并安装了psycopg2。在那之后,它成功了

您可能没有在默认配置中正确提供WSGIDaemonProcess。请尝试以

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

其中,用正确的venv路径替换<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()

相关问题 更多 >