在路上!~~~~

暂无签名

  • 博客访问: 112741
  • 博文数量: 64
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 435
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-25 09:52
  • 认证徽章:
个人简介

no pains no gains

文章分类

全部博文(64)

文章存档

2017年(7)

2016年(40)

2015年(17)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: 系统运维

apache+Django+mod_wsgi(CentOS5.9)

1.安装apache
1.首先卸载环境自带的httpd
    # rpm -e httpd --nodeps

2.安装gcc
    # yum install -y *gcc*(此过程在虚拟机的环境为CentOS上需要大约40分钟)

3.解压httpd并进行安装(/root/tools/)
    # cd /root/tools
    # tar zxvf httpd-2.2.15.tar.gz
    # cd httpd-2.2.15
    # ./configure --prefix=/usr/local/apache2 --enable-rewrite --enable-so(大约两分钟,选项的作用主要是允许动态加载模块,以后我们要加载mod_wsgi)
    # make(大约三分钟)
    # make install

4.启动apache服务
    # /usr/local/apache2/bin/apachectl start

5.测试
    # firefox localhost
当看到"It works"代表apache配置成功

2.安装mod_wsgi
1.解压,安装
    # tar zxvf mod_wsgi-3.3.tar.gz -C /usr/local/src/
    # cd /usr/local/src/mod_wsgi-3.3/
    # ./configure --with-apxs=/usr/local/apache2/bin/apxs(apache动态添加的一个模块)
                       --with-python=/usr/local/bin/python2.7(指定python的路径)
                       --with-mutex-dir=/var/run/mod_wsgi(最大缓冲值的目录)
    # make 在这一步如果出现make: *** [mod_wsgi.la]错误则需要重新编译安装python2.7并加上--enable-shared参数.
    # make install

编译过程遇到"error while loading shared libraries: libpython2.7.so.1.0:cannot open shared object file: No such file or directory"错误解决:

原因
    在系统的lib路径中找不到这个共享库. 
    如果编译时加上了--enable-shared,才会编译这个共享库,默认的位置是python可执行程序所在目录的lib目录下,如/usr/local/python27

解决方法
    1.可以使用如下方式编译Python解决这个问题
          # ./configure --enable-shared --prefix=/usr/local/python27
          # make && make install

    2.
        # cp /usr/local/python27/lib/libpython2.7.so.1.0 /usr/local/lib
        # cd /usr/local/lib
        # ln -s libpython2.7.so.1.0 libpython2.7.so

    3.
        # whereis libpython2.7.so.1.0
        libpython2.7.so.1:/usr/local/lib/libpython2.7.so.1.0

    4.如果whereis没有结果,或者仍然没有解决问题
        # cat /etc/ld.so.conf
        include ld.so.conf.d/*.conf
        /usr/local/lib
        # /sbin/ldconfig
        # /sbin/ldconfig -v|grep libpython2.7*
        # make && make install
或者

安装了python2.7,第一次执行时报错:
error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

解决方法如下:
1.编辑      vi /etc/ld.so.conf 
如果是非root权限帐号登录,使用 sudo vi /etc/ld.so.conf 
添加上python2.7的lib库地址,如我的/usr/local/Python2.7/lib,保存文件

2.执行 /sbin/ldconfig -v命令,如果是非root权限帐号登录,使用 sudo  /sbin/ldconfig -v。这样 ldd 才能找到这个库,执行python2.7就不会报错了

/etc/ld.so.conf:
这个文件记录了编译时使用的动态链接库的路径。
默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件
如果你安装了某些库,没有指定 --prefix=/usr 这样lib
库就装到了/usr/local下,而又没有在/etc/ld.so.conf中添加/usr/local/lib,就会报错了

ldconfig是个什么东东吧 :
它是一个程序,通常它位于/sbin下,是root用户使用的东东。具体作用及用法可以man ldconfig查到
简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用
因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig
使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果
编译过程中抱错,缺少xxx库。

2.配置Apache
    在Apache配置文件httpd.conf中,增加一行:
    LoadModule wsgi_module modules/mod_wsgi.so
    AddType text/html .py

3.修改Virtual Host配置
    Apache 可以配置很多个 Named-based Virtual Hosts ,可以在一个服务器上部署多个Web Sites。
    在Apache配置文件/usr/local/apache2/conf/extra/httpd-vhosts.conf增加:
    
        ServerName unicorn.test.com
        ServerAlias unicorn.test.cn
        DocumentRoot "/var/www/mysite"
        WSGIScriptAlias /test "/var/www/mysite/wsgi/django.wsgi"
        Alias /static "/var/www/static/"
        
           Order Deny,Allow
           Allow from all
        
        
           Order Deny,Allow
           Allow from all
        
    

4.创建测试页面
1.创建django工程:
    django-admin.py startproject mysite

2.创建django.wsgi文件:
    在mysite文件夹下创建文件夹wsgi;
    在wsgi文件夹下面创建django.wsgi文件,其内容为:
        import os
        import sys

        sys.stdout = sys.stderr

        from os.path import abspath, dirname, join
        from site import addsitedir

        from django.core.handlers.wsgi import WSGIHandler

        sys.path.insert(0, abspath(join(dirname(__file__), "../")))
        sys.path.insert(0, abspath(join(dirname(__file__), "../../")))

        os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings" #your settings module

        application = WSGIHandler()

重启apache访问localhost/test看到django的It worked成功.

阅读(107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册