Django应用程序部署-504超时-没有名为'encodings'的模块(Ubuntu 18.04,Django 2.2.1,Python 3.7,Apache 2.4.29,mod-WSGI 4.6.7)

问题描述 投票:1回答:1

问题:遵循Django Web应用程序的标准设置。我正在使用Ubuntu 18.04,Django 2.2.1,Python 3.7,Apache 2.4.29,mod-WSGI 4.6.7和virtualenv来创建virtualenv。当我尝试访问我的站点(IP或FQDN)时,出现504网关超时错误

我检查Apache2日志并每隔一秒钟收到以下错误:

当前线程0x00007f52f8874bc0(最近调用优先):[2019年9月23日星期一02:49:26.540404] [core:notice] [pid 9896:tid 139994333662144] AH00051:孩子pid 10305退出信号异常终止(6),/ etc / apache2中可能有coredump致命的Python错误:Py_Initialize:无法获取区域设置编码ModuleNotFoundError:没有名为“ encodings”的模块

python manage.py runserver运行正常,我可以从其他设备通过浏览器通过IP或FQDN进行访问。数据库没有任何问题,也没有其他问题(尽管使用FQDN而不是IP#我在CSS / JS上遇到404错误,尽管负载很重-但这可能是一个单独的问题)

我尝试过:*重置virtualenv*重置Apache2*不同的Apache .conf安排*我在PyCon Au 2010上观看了@Graham Dumpleton的精彩视频“ Apache / mod_wsgi入门”。并尝试实现他的一些见解

Apache2 Conf

WSGIRestrictEmbedded On
<VirtualHost *:80>
...
...
...
    Alias /static /project/static
    <Directory /project/static>
        Require all granted
    </Directory>

    Alias /media /project/media
        <Directory /project/media>
                Require all granted
        </Directory>

    <Directory /project/main>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    WSGIDaemonProcess django_app python-path=/project python-home=/project/venv
    WSGIScriptAlias / /project/main/wsgi.py process-group=django_app
    WSGIProcessGroup django_app
    WSGIApplicationGroup %{GLOBAL}
</VirtualHost>

Apache2错误文件

Current thread 0x00007f52f8874bc0 (most recent call first):
[Mon Sep 23 02:49:26.540404 2019] [core:notice] [pid 9896:tid 139994333662144] AH00051: child pid 10305 exit signal Aborted (6), possible coredump in /etc/apache2
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

UFW状态

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)  
django apache2 mod-wsgi
1个回答
0
投票

更新:感谢下面的Graham链接,我能够使它工作。我相信我已经通过apt-get install在系统上安装了libapache2-mod-wsgi-py3。我还尝试了在Python虚拟环境处于活动状态时通过pip安装mod-wsgi,但两者均无效。我检查了mod-wsgi.so和mod-wsgi.so-python3.6(或类似名称的文件,指示Python 3.6),看起来mod-wsgi.so被链接到python 3.6 .so文件。

SOLUTION:我从系统中清除了libapache2-mod-wsgi-py3,并按照Graham的建议遵循了https://modwsgi.readthedocs.io/en/develop/user-guides/quick-installation-guide.html上的安装说明指南。我确保使用./configure --with-python = / path / to / virtualenv / python来确保使用正确的Python来安装mod-wsgi。

这解决了问题。谢谢@Graham Dumpleton。

© www.soinside.com 2019 - 2024. All rights reserved.