首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mod_wsgi: doable在CentOS6.5上部署一个基于python3.4的Django项目?

使用mod_wsgi: doable在CentOS6.5上部署一个基于python3.4的Django项目?
EN

Stack Overflow用户
提问于 2015-09-18 02:35:49
回答 3查看 3.9K关注 0票数 1

我有一个使用dev web服务器运行良好的项目,但是我遇到了很多问题,让它在一个带有系统apache (即通过yum安装的)旧的centos盒上运行得很好。我卸载了基于yum的wsgi (因为它确实是针对系统python2.x编译的),并且尝试使用通过pip install mod-wsgi安装的那个。(其中pip是python3 pip)。

在我进入细节之前,我只想问一下互联网我应该卸载apache并尝试从源代码构建一个新版本吗?我应该使用虚拟env吗?皮恩夫还是维图阿列夫?如果是这样的话,应该将mod安装在项目的venv或python3 (/usr/local/)的"system“位置。

似乎其他可怜的灵魂在黑暗中也有同样的一声不响 (旧的centos盒,闪亮的新python版本)。

我已经阅读了很多在线文档,比如如何使用WSGI进行部署部署Django (Django图书),但是似乎没有人能解决这个特殊的组合。

我希望它能让我使用一个基于Debian的系统,看起来会更容易一些。

以下是我的apache版本信息:

代码语言:javascript
复制
apachectl -V
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 18 2015 02:00:22
Server's Module Magic Number: 20051115:25
Server loaded:  APR 1.3.9, APR-Util 1.3.9
Compiled using: APR 1.3.9, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/etc/httpd"
 -D SUEXEC_BIN="/usr/sbin/suexec"
 -D DEFAULT_PIDLOG="run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

下面是我的httpd.conf文件的一些片段:

代码语言:javascript
复制
LoadModule wsgi_module /opt/deeplogic-django/venv/lib/python3.4/site-packages/mod_wsgi/server/mod_wsgi-py34.cpython-34m.so
# lines omitted....
WSGIScriptAlias / /opt/myproject/myapp/wsgi.py
WSGIPythonPath /opt/myproject:/opt/myproject/venv/lib/python3.4/site-packages                           
WSGIPythonHome /opt/myproject/venv/bin
<Directory /opt/myproject/myapp>
<Files wsgi.py>
       Order deny,allow
       Allow from all
</Files>
</Directory>

下面是我尝试启动apache时遇到的最新错误:

代码语言:javascript
复制
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
[Thu Sep 17 11:51:47 2015] [notice] child pid 1393 exit signal Aborted (6)

感谢任何指点、建议、智慧。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-21 13:28:46

我在CentOS6.5中成功地使用了Apache和Python3.x(因为它正在工作)。下面是我使用的设置(我坚持使用Python3.3.x,Python3.4与pyodbc有问题)。

首先,安装EPEL..。

代码语言:javascript
复制
yum -y -q install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

然后阿帕奇..。

代码语言:javascript
复制
yum -y -q install httpd mod_ssl httpd-devel

然后对于Python (包括一些非常常用的pre):

代码语言:javascript
复制
yum -y -q groupinstall development
yum -y -q install zlib2-devel openssl-devel sqlite-devel bzip2-devel python-devel openssl-devel openssl-perl libjpeg-turbo libjpeg-turbo-devel zlib-devel giflib ncurses-devel gdbm-devel xz-devel tkinter readline-devel tk tk-devel kernel-headers glibc libpng gcc-c++

安装Python3.3.5(您可能可以使用更最新的版本):

代码语言:javascript
复制
wget 'http://www.python.org/ftp/python/3.3.5/Python-3.3.5.tgz'
tar -xzf 'Python-3.3.5.tgz'
cd ./Python-3.3.5
CXX=g++ ./configure --enable-shared --quiet
make
make altinstall
ln -s /usr/local/bin/python3.3 /usr/bin/python3.3
echo "/usr/local/lib/python3.3" > /etc/ld.so.conf.d/python33.conf
echo "/usr/local/lib" >> /etc/ld.so.conf.d/python33.conf

创建并编译mod_wsgi (同样,您可以使用更最新的版本,或者查看!):

代码语言:javascript
复制
wget "https://github.com/GrahamDumpleton/mod_wsgi/archive/4.2.8.tar.gz"
tar -xzf '4.2.8.tar.gz'
cd ./mod_wsgi-4.2.8
./configure --with-python=/usr/local/bin/python3.3
make
make install

和Ubuntu相比非常迟钝,但是你有它。嗯,祝你好运!

票数 3
EN

Stack Overflow用户

发布于 2015-09-18 03:07:59

我在这里发现了一个非常类似的帖子,(Apache2.2.15在CentOS 6.5上)。我不把它标记为重复,因为我不确定问题/解决方案是否相同。

保重。

票数 0
EN

Stack Overflow用户

发布于 2015-09-18 04:44:26

几周前,我自己也尝试过同样的方法,我的vp有centos 6.7和Apache2.2,我的项目是使用python2.7和django 1.8.3开发的,我用来获得一个错误,这意味着无论我安装在虚拟中的哪个版本的python,mod_wsgi都使用默认的pythoni.epython2.6来编译它,并且在python 文档中明确提到,对于django 1.8,您需要python2.7或更高版本。

所以不管你在做什么都是不明智的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32642937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档