gpt4 book ai didi

django - 无法在 Ubuntu 14.04、Apache/2.4.7、libapache2-mod-wsgi-py3、Python 3.4 virtualenv、Django 1.86 中获取语言环境编码

转载 作者:行者123 更新时间:2023-12-04 18:51:27 25 4
gpt4 key购买 nike

我正在尝试使用本教程设置一个简单的 Django 应用程序:
https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-ubuntu-14-04

我的配置是:
Ubuntu 14.04、Apache/2.4.7、libapache2-mod-wsgi-py3、Python 3.4、Django 1.86

每当我尝试使用其 IP 访问服务器时,我都会在 apache 日志中收到以下错误:

ImportError: No module named 'encodings'
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
[Sat Nov 07 01:26:56.505373 2015] [core:notice] [pid 20920:tid 140075144152960] AH00051: child pid 21716 exit signal Aborted (6), possible coredump in /etc/apache2
[Sat Nov 07 01:26:56.505478 2015] [core:notice] [pid 20920:tid 140075144152960] AH00051: child pid 21717 exit signal Aborted (6), possible coredump in /etc/apache2
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

我的虚拟主机文件如下所示:
<VirtualHost *:80>  

ServerAdmin
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html

Alias /static /home/admin/myproject/static
<Directory /home/admin/myproject/static>
Require all granted
</Directory>

<Directory /home/admin/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIDaemonProcess myproject python-path=/home/admin/myproject:/home/admin/myproject/myprojectenv/lib/python3.4/site-packages
WSGIProcessGroup myproject
WSGIScriptAlias / /home/admin/myproject/myproject/wsgi.py

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

在 virtualenv 中设置 Django 时没有错误。

最佳答案

我终于能够解决这个问题。由于我使用的是 Python 3.4,因此我需要提前安装 libapache2-mod-wsgi-py3。这会将 mod-wsgi 的预编译版本安装到/usr/lib/apache2/modules 的 Apache 模块文件夹中。
它还为 wsgi-express 安装了 apache 模块。

Apache 加载的模块由/etc/apache2/mods-enabled/中的配置文件控制

这里每个模块有 2 个文件。一个 .load 和一个 .conf 文件。我看到了文件 wsgi.load & wsgi.conf 以及 wsgi-express.load & wsgi-express.conf
.load 文件提到要加载的 .so 模块

两个 .load 文件都有一行开头:

LoadModule wsgi_module /usr/lib/apache2/modules/...

这意味着 wsgi_module 被加载了两次。每当我重新启动 Apache 2 时,我都会收到一条警告,即 mod-wsgi 已经加载,因此正在跳过。所以我做的第一件事是禁用 mod-wsgi_express
a2dismod wsgi_express

只剩下 1 个 mod-wsgi 需要加载。这应该有效。

实际上,我更进一步,从源代码编译了最新的 mod-wsgi https://www.digitalocean.com/community/tutorials/installing-mod_wsgi-on-ubuntu-12-04

最新的 mod-wsgi 可以在这里找到 https://github.com/GrahamDumpleton/mod_wsgi/releases

编译很顺利,我在/usr/lib/apache2/modules 中得到了一个名为 mod_wsgi.so-3.4 的模块

在我的/etc/apache2/mods-enabled/wsgi.load 我输入:
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so-3.4

重新启动Apache后它工作了!

关于django - 无法在 Ubuntu 14.04、Apache/2.4.7、libapache2-mod-wsgi-py3、Python 3.4 virtualenv、Django 1.86 中获取语言环境编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com