MAC OS 10.11 python3+django+apache2.4+wsgi部署流程

10 篇文章 0 订阅
1 篇文章 0 订阅

Python版本: python3.+
Django版本:1.11
Apache版本:mac内置的2.4
mod_wsgi版本:4.5
运行环境: Mac OS 10.11

一 mod_wsgi下载与安装

下载地址: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就能成功安装了

二 Apache的启动和配置

因为mac10.11自带有apache2.4就不需要我们另外去下载了,只是在部署的时候更需要关注权限的问题。
配置apache的目的是为了通过wsgi模块将django部署到apache上。

在配置apache服务涉及到的指令:

  1. apachectl start 启动apache服务器,通常配合sudo一起食用
  2. apachectl configtest 检测配置文件语法是否有错
  3. 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 编辑配置文件,添加虚拟主机

<VirtualHost *:80>
    ServerName dev.mysite.com
    ServerAdmin my@mysite.com
    # WGSI configuration
    # WSGIProcessGroup mysite.com
    WSGIScriptAlias / /Users/hyl/Documents/django/mysite/mysite/wsgi.py

    <Directory "/Users/hyl/Documents/django/mysite/mysite">
        <Files wsgi.py>
            Order allow,deny
            Allow from all
        </Files>
    </Directory>

</VirtualHost>

上面的配置中/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/,我遇到了以下几个问题,问题先后已记不清了

问题1. Forbidden You don’t have permission to access / on this server.

解决办法:
通过在错误日志里查看信息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都赋权限之后才解决了这一问题。

问题2. Invalid HTTP_HOST header: ‘dev.mysite.com’. You may need to add u’dev.mysite.com’ to ALLOWED_HOSTS.

解决办法:
这是因为没有在mysite/mysite/setting.py中将dev.mysite.com添加进ALLOWED_HOSTS
只需要在setting.pyALLOWED_HOSTS = []修改为ALLOWED_HOSTS = ['dev.mysite.com',]即可以解决

问题3. 有时候在修改了mysite中的代码后,会报错RuntimeError: populate() isn’t reentrant

解决办法:
保存python代码后重启apache服务器即可解决

问题4. SyntaxError: Non-ASCII character

解决办法:
在报错的python文件首行添加上编码格式# -*- coding:utf-8 -*_即可以解决

问题5. ImportError: No module named mysite.settings. Target WSGI script ‘/Users/hyl/Documents/django/mysite/mysite/wsgi.py’ cannot be loaded as Python module.

解决办法:
wsgi.py文件中,将python3.6的库文件夹添加到该项目中

sys.path.append('/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages')

问题6. ImportError: No module named mysite.settings

解决办法:
和问题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("<p>世界好</p>")

看到的结果如下图
这里写图片描述
至此,大功告成

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值