您的位置:首页 > 运维架构 > Apache

Mac下Django通过WSGI部署到Apache

2014-05-04 18:58 731 查看
Python菜鸟一枚  为了部署这个项目忙活了半天 晕头转向的最终终于成功了  特此记录

Mac将Django通过uwsgi部署到apache详细介绍

我的Mac OSX是10.9的

Mac下自带了apache2 

安装位置为/etc/apache2

默认的的一个项目根目录为 /Library/WebServer/Documents

mac下apache2的bin目录中的命令比如 apxs 都在系统的/usr/sbin下 并不在apache的目录下

将Django项目部署到Apache下首先要下载mod_wsgi(mod_python是一样的但是官方推荐使用wsgi)编译出一个mod_wsgi.so文件放到/etc/apache2/modules目录下

(modules这个目录在我电脑上是没有的所以我自己新建了一个名为modules的文件夹)

mod_wsgi的下载方式有很多种 我这里是在mac下 所以使用的是mac下的安装方式之一 

我先下载了一个homebrew 地址为http://brew.sh/ 按照目前官方上的方式直接在命令行输入

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" 就可以安装成功 

然后直接输入 brew install mod_wsgi 就可以直接安装  但是如果你的mac电脑没有安装Xcode盒commandlinetools 是一定会失败的

因为brew会先获取到一个C语言的包并通过commandlinetools的make命令将其打包成mod_wsgi.so文件所以在这之前一定要先安装Xcode在安装commandlinetools

注意顺序要先安装Xcode在安装commanglinetools 

OK 即使到了这一步 输入brew install mod_wsgi依然会失败大概的输出如下

/usr/sbin/apxs -c -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -DENABLE_DTRACE -DMACOSX -DNDEBUG -DNDEBUG -DENABLE_DTRACE  -Wc,'-arch x86_64' mod_wsgi.c -Wl,-F/System/Library/Frameworks -framework Python -u _PyMac_Error /System/Library/Frameworks/  -arch x86_64 -ldl  -framework CoreFoundation
/usr/share/apr-1/build-1/libtool --silent --mode=compile /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc    -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -I/usr/local/include -I/usr/include/apache2  -I/usr/include/apr-1   -I/usr/include/apr-1  -arch x86_64 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -DENABLE_DTRACE -DMACOSX -DNDEBUG -DNDEBUG -DENABLE_DTRACE  -c -o mod_wsgi.lo mod_wsgi.c && touch mod_wsgi.slo
env: /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc: No such file or directory
apxs:Error: Command failed with rc=65536
.
make: *** [mod_wsgi.la] Error 1
这里在make的时候会去找
/Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/cc
这个命令

可是这个命令实际上并不在这个目录下所以才会失败  可以通过软连接的方式解决该问题 比如

$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain
将其指向其真正的目录下这样在编译时就不会报错了


而编译好的mod_wsgi.so就会出现在/usr/local/Cellar的目录下将其拷贝到/etc/apache2/modules的目录下第一步就完成了

下一步呢就是修改.etc/apache2/httpd.conf

在最底部加上

LoadModule wsgi_module /etc/apache2/modules/mod_wsgi.soWSGIScriptAlias / "/Applications/Developer/worspace/workspace_python/template_02/template_02/wsgi.py"

#上面红色部分是我的项目中wsgi.py的路径一般通过pycharm创建的django的项目会自动生成<Directory "/Applications/Developer/worspace/workspace_python/template_02/">

# 这里配置的则是我的项目路径 这两个地方都要替换成自己的项目路径Order Deny,AllowAllow from all</Directory>ServerName 127.0.0.1:80

我的wsgi.py文件如下

"""
WSGI config for template_02 project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ """

import os,sys
import django
#红色标记的这句是额外加进来的这里要添加的是项目路径
sys.path.append('/Applications/Developer/worspace/workspace_python/template_02')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "template_02.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
#application = django.core.handlers.wsgi.WSGIHandler()


另外还有一点要配置的地方是在settings.py中 

TEMPLATE_DIRS = (
'/Applications/Developer/worspace/workspace_python/template_02' + '/templates',
)
这里要设置成绝对路径不能使用以下这种方式

os.path.realpath(os.path.pardir)+'/template_02/templates' 否则会找不到你的模板 因为这里的os.path.realpath(os.path.pardir)获得的值会为空

原因是啥我也不太清楚  希望有知道的朋友帮忙讲解下

如果以上的配置都和我弄得一模一样那么现在在命令行输入

sudo apachectl start 

然后再浏览器中输入127.0.0.1:80既可以访问到自己的项目 这里最好将settings.py中的DEBUG设置为true这样方便自己查看错误信息

还有一点是 如果apache服务器无法启动 可以到/var/log/apache2目录下查看日志信息这个真的很有用 我有些错误就是在这里找到之后才得以解决的


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django mac apache