使用wsgi模块将Django加于apache
2012-11-26 23:53
399 查看
1. WSGI模块的编译和安装:
首先,从code.google下载mod_wsgi-3.4.tar.gz源码包。
解压并进入目录运行"./configure --with-apxs=/usr/local/apache2/bin/axps --with-python=/usr/local/bin/python",其中这两个with分别用于制定apache安装文件的axps路径,和python解释器的路径。在运行make的时候,它们都会被用到。
运行make。出现如下错误:“apxs:fatal error: Python.h No such file or directory"。解决办法,安装python-devel包。
make install, 完成安装。
2. 配置apache的http.conf
增加一行,"LoadModule wsgi_module modules/mod_wsgi.so"
增加一行,“WSGIScriptAlias /mysite /home/djweb/mysite/mysite/wsgi.py" #这个路径是用django-admin.py startproject mysite时自动创建的wsgi.py的路径。
增加一行,“WSGIPythonPath /home/djweb/mysite" #这是站点的路径,这个还是挺有用的。其实,是在sys.path中增加一个路径项。
#如果apache的error日志中有如下错误,”Execption occured processing WSGIScript '/home/djweb/mysite/mysite/wsgi.py", "could not import settings 'mysite.settings'"时,就是sys.path中并没有包含“/home/djweb/mysite"这个路径。这时可以增加这一行解决,或者想办法在sys.path中永久地增加这个路径。(PYTHONPATH,或者site-packages/目录下增加一个mysite.pth)
设置权限:apache2.2和apache2.4相比,有些不同。下面的是2.2的配置:
<Directory /home/djweb/mysite/mysite>
Order deny, allow
Allow from all
</Directory>
可能遇到403错误,error日志里有 ”(13)Permission denied: access to /dj denied (filesystem path '/home/...') because search permissions are missing on a component of the path“。这是由于目标目录上的每个目录都需要有执行权限。chmod a+x给每个目录增加执行权限,可解决这个问题。
2.4的配置如下:
<Directory /home/djweb/mysite/mysite>
Require all granted #否则会出现403的错误, error日志里有" AH01630: client denied by server configuration“
</Directory>
3. 到这里,重启apache服务, 就可以通过http://localhost/mysite访问了。看到下面,就成功了。
4. wsgi.py文件说明。
默认情况下,这个文件其实就做两件事情。
os.environ.setdefault(“DJANGO——SETTINGS——MODULE”, “mysite.settings")#导入设置文件
from django.core.wsgi import get_wsgi_applicatioin
application = get_wsgi_application() #创建一个叫做application的对象,WSGI服务会使用它。
我们可以自己写一个简单的测试一下:
def appication(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('content-type', 'text/plain'),
('content-length', str(len(output)))]
start_response(status, response_headers)
return [output]
用这个替换wsgi.py,就会看到“Hello World"了。
5.wsgi的运行模式
默认情况下,wsgi是运行在embeded的模式下,即在apache的worker进程内。对wsgi application的修改,需要重启apache才能生效。
另外一种模式是daemon模式,wsgi运行在独立的进程内,wsgi的代码改变时,不需要重启apache就能生效。目前,还没有深入研究这两个的区别和具体用法。
总结:坚持写博文,不容易啊。挺花时间的,但是,好处是可以让自己的思路便清晰点。最重要的,还是记录自己这个成长的过程,记录遇到的问题,也许对他人也有用呢。现在,还只是在起步的皮毛阶段。加油啊!
首先,从code.google下载mod_wsgi-3.4.tar.gz源码包。
解压并进入目录运行"./configure --with-apxs=/usr/local/apache2/bin/axps --with-python=/usr/local/bin/python",其中这两个with分别用于制定apache安装文件的axps路径,和python解释器的路径。在运行make的时候,它们都会被用到。
运行make。出现如下错误:“apxs:fatal error: Python.h No such file or directory"。解决办法,安装python-devel包。
make install, 完成安装。
2. 配置apache的http.conf
增加一行,"LoadModule wsgi_module modules/mod_wsgi.so"
增加一行,“WSGIScriptAlias /mysite /home/djweb/mysite/mysite/wsgi.py" #这个路径是用django-admin.py startproject mysite时自动创建的wsgi.py的路径。
增加一行,“WSGIPythonPath /home/djweb/mysite" #这是站点的路径,这个还是挺有用的。其实,是在sys.path中增加一个路径项。
#如果apache的error日志中有如下错误,”Execption occured processing WSGIScript '/home/djweb/mysite/mysite/wsgi.py", "could not import settings 'mysite.settings'"时,就是sys.path中并没有包含“/home/djweb/mysite"这个路径。这时可以增加这一行解决,或者想办法在sys.path中永久地增加这个路径。(PYTHONPATH,或者site-packages/目录下增加一个mysite.pth)
设置权限:apache2.2和apache2.4相比,有些不同。下面的是2.2的配置:
<Directory /home/djweb/mysite/mysite>
Order deny, allow
Allow from all
</Directory>
可能遇到403错误,error日志里有 ”(13)Permission denied: access to /dj denied (filesystem path '/home/...') because search permissions are missing on a component of the path“。这是由于目标目录上的每个目录都需要有执行权限。chmod a+x给每个目录增加执行权限,可解决这个问题。
2.4的配置如下:
<Directory /home/djweb/mysite/mysite>
Require all granted #否则会出现403的错误, error日志里有" AH01630: client denied by server configuration“
</Directory>
3. 到这里,重启apache服务, 就可以通过http://localhost/mysite访问了。看到下面,就成功了。
It worked!
Congratulations on your first Django-powered page.
4. wsgi.py文件说明。默认情况下,这个文件其实就做两件事情。
os.environ.setdefault(“DJANGO——SETTINGS——MODULE”, “mysite.settings")#导入设置文件
from django.core.wsgi import get_wsgi_applicatioin
application = get_wsgi_application() #创建一个叫做application的对象,WSGI服务会使用它。
我们可以自己写一个简单的测试一下:
def appication(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('content-type', 'text/plain'),
('content-length', str(len(output)))]
start_response(status, response_headers)
return [output]
用这个替换wsgi.py,就会看到“Hello World"了。
5.wsgi的运行模式
默认情况下,wsgi是运行在embeded的模式下,即在apache的worker进程内。对wsgi application的修改,需要重启apache才能生效。
另外一种模式是daemon模式,wsgi运行在独立的进程内,wsgi的代码改变时,不需要重启apache就能生效。目前,还没有深入研究这两个的区别和具体用法。
总结:坚持写博文,不容易啊。挺花时间的,但是,好处是可以让自己的思路便清晰点。最重要的,还是记录自己这个成长的过程,记录遇到的问题,也许对他人也有用呢。现在,还只是在起步的皮毛阶段。加油啊!
相关文章推荐
- 在Windows下使用Python3、Django和Apache部署网站
- 使用mod_wsgi将django部署到apache
- Python进阶(三十七)-Windows7使用nginx+apache部署django项目
- 使用WSGI在Apache服务器中部署Django项目实例
- Ubuntu系统使用apache部署多个django项目(python4.3)
- Ubuntu 12.04使用Django + apache + mysql 开发web应用(一)
- Django使用Apache2.2通过Mod_wsgi搭建站点服务器
- 使用APACHE部署DJANGO程序的时候如何配置静态文件支持?
- Python3.5 Django1.8 apache2.4 Ubuntu 配置mod_wsgi模块
- Django:使用PyCharm创建django项目并发布到apache2.4
- apache服务器使用wsgi部署django站点
- Django在使用mod_python+apache中配置VirtualHost的问题总结
- 使用相同的Apache实例来运行Django和Media文件
- 使用Django+MySQL+Apache+Linux创建简单的博客
- 【Django】 Windows下使用Apache+mod_wsgi部署Django
- Ubuntu 12.04使用Django + apache + mysql 开发web应用(一)
- 用mod_wsgi在apache中使用django
- 在windows下使用apache与mod_python来集成django
- 在生产环境使用apache、mod_wsgi搭建Django运行环境。
- 使用Apache服务器wsgi方式部署Django应用