【问题标题】:Django App Deployment - 504 Timeout - No module named 'encodings' (Ubuntu 18.04, Django 2.2.1, Python 3.7, Apache 2.4.29, mod-WSGI 4.6.7)Django 应用程序部署 - 504 超时 - 没有名为“编码”的模块(Ubuntu 18.04、Django 2.2.1、Python 3.7、Apache 2.4.29、mod-WSGI 4.6.7)
【发布时间】:2020-01-23 02:17:06
【问题描述】:

问题:遵循 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 日志,每隔 1 秒就会收到以下错误:

当前线程 0x00007f52f8874bc0(最近的调用优先): [Mon Sep 23 02:49:26.540404 2019] [core:notice] [pid 9896:tid 139994333662144] AH00051:子 pid 10305 退出信号中止(6),/etc/apache2 中可能的核心转储 致命的 Python 错误:Py_Initialize:无法获取语言环境编码 ModuleNotFoundError: 没有名为“编码”的模块

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

我尝试过: * 重置虚拟环境 * 重新设置 Apache2 * 不同的 apache .conf 安排 * 我观看了来自 PyCon Au 2010 的 @Graham Dumpleton 的精彩视频“Apache/mod_wsgi 入门”。并尝试实施他的一些见解

Apache2 会议

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)  

【问题讨论】:

  • 这通常是modwsgi.readthedocs.io/en/develop/user-guides/… 的变体,您的 mod_wsgi 是针对不同于创建虚拟环境的 Python 安装编译的,或者 mod_wsgi 没有为 Python 安装找到正确的 Python 共享库因为您尝试在非标准位置使用自定义 Python 安装,但它从系统库中获取 Python 库。提供有关您如何安装 mod_wsgi 以及您正在使用 Python 的位置的更多详细信息。
  • 格雷厄姆,感谢您的回复。我能够按照您的链接重新安装并使其正常工作。我将在上面的帖子中添加一个更新,以准确包含我为使其工作所做的工作。再次感谢您为 mod-wsgi 对 Python 世界所做的贡献!

标签: django apache2 mod-wsgi


【解决方案1】:

更新:感谢 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 文件。

解决方案:我从系统中清除了 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。

【讨论】:

    猜你喜欢
    • 2015-08-26
    • 2014-04-11
    • 2020-04-01
    • 1970-01-01
    • 2019-07-30
    • 2022-12-30
    • 2017-11-09
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多