Python版本: python3.+
Django版本:1.11
Apache版本:mac内置的2.4
mod_wsgi版本:4.5
运行环境: Mac OS 10.11
下载地址:mod_wsgi 4.5.22.tar.gz
安装:
1. 解压mod_wsgi 4.5.22.tar.gz
2. 在终端 cd 到解压后的目录下
3. 输入指令./configure
4. 再键入sudo make
5. 最后执行sudo make install
6. 若成功安装,安装完毕后终端的最后一条命令应该是chmod 755 /usr/libexec/apache2/mod_wsgi.so
我在安装到最后一步的时候报错了,症状是mod_wsgi.so
文件没有成功地放入目录下,查资料,发现是MAC OS 10.11特有的rootless导致的,需要先关闭它,方法如下:
方法如下:
1. 重启电脑开后按住 Command-R 进入恢复分区;
2. 然后在实用工具
栏找到终端
启动运行;
3. 输入:csrutil disable
4. 你会看到系统保护被关闭的字样
5. 当再次重启时,rootless就已经被关闭了
在关闭了rootless之后,重新进到解压后的目录,执行sudo make install
就能成功安装了
因为mac10.11自带有apache2.4就不需要我们另外去下载了,只是在部署的时候更需要关注权限的问题。
配置apache的目的是为了通过wsgi模块将django部署到apache上。
在配置apache服务涉及到的指令:
apachectl start
启动apache服务器,通常配合sudo
一起食用apachectl configtest
检测配置文件语法是否有错apachectl graceful
重启apache服务器,配合sudo
效果更佳因为apache2.4是系统自带的,所以我们直接在终端开启apache服务器sudo apachectl start
,打开浏览器输入 http://localhost/
,若能看到It Works
就说明配置之前的apache是正常的。
下面介绍的方法是在apache上配置一个虚拟主机,通过自己设置的域名来访问mysite项目
例如现在我创建了一个django工程:mysite
mysite
项目路径:/Users/hyl/Documents/django/mysite
wsgi.py
文件路径:/Users/hyl/Documents/django/mysite/mysite/wsgi.py
1 首先 在http.conf文件中设置可以引入包含虚拟主机的文件:
# Virtual hosts
# Include /private/etc/apache2/extra/httpd-vhosts.conf
将上面的#去掉就可以引入虚拟主机的配置文件了
配置文件httpd.conf的路径默认为/private/etc/apache2/httpd.conf
2 根据对应的路径/private/etc/apache2/extra/httpd-vhosts.conf
打开 httpd-vhosts.conf
虚拟主机配置文件
3 编辑配置文件,添加虚拟主机
ServerName dev.mysite.com
ServerAdmin [email protected]
# WGSI configuration
# WSGIProcessGroup mysite.com
WSGIScriptAlias / /Users/hyl/Documents/django/mysite/mysite/wsgi.py
Order allow,deny
Allow from all
上面的配置中/Users/hyl/Documents/django/mysite/mysite
是Django项目所在的位置。而/Users/hyl/Documents/django/mysite/mysite/wsgi.py
是Django项目中自动创建的文件。
可以看到,利用WSGIScriptAlias,我们实际上将URL /
对应了wsgi接口程序。这样,当我们访问根URL时,访问请求会经由WSGI接口,传递给Django项目mysite。
配置好后,重启apache
sudo apachectl graceful
在这一步之后,访问http://dev.mysite.com/
,我遇到了以下几个问题,问题先后已记不清了
解决办法:
通过在错误日志里查看信息AH00035: access to / denied (filesystem path '/Users/hyl/Documents/django') because search permissions are missing on a component of the path
再结合网上资料,确定是需要给这个文件夹赋权限,但是在我给/Users/hyl/Documents/django
赋予权限之后,问题并没有解决。因为可能在父目录就没有权限,于是我是在将 /Users
,/Users/hyl
,/Users/hyl/Documents
,/Users/hyl/Documents/django
都赋权限之后才解决了这一问题。
解决办法:
这是因为没有在mysite/mysite/setting.py
中将dev.mysite.com
添加进ALLOWED_HOSTS
中
只需要在setting.py
将ALLOWED_HOSTS = []
修改为ALLOWED_HOSTS = ['dev.mysite.com',]
即可以解决
解决办法:
保存python代码后重启apache服务器即可解决
解决办法:
在报错的python文件首行添加上编码格式# -*- coding:utf-8 -*_
即可以解决
解决办法:
在wsgi.py
文件中,将python3.6的库文件夹添加到该项目中
sys.path.append('/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages')
解决办法:
和问题5相类似,这个问题是缺少项目的路径。在wsgi.py
文件中,将项目路径添加进去。
sys.path.append('/Users/hyl/Documents/django/mysite')
当全部问题都解决之后,应该能看到初始的”It worded!”,或者是项目里返回的内容,比如我在urls.py里设置的
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.first_page),
]
以及views.py下的对应函数
def first_page(request):
return HttpResponse("世界好
")