zoukankan      html  css  js  c++  java
  • ubuntu12.04下django-apache配置

    原谅我这个小白到现在才搭建好apache....之前都是无限次的 cd mysite(第一个django project啊,就没变过= =),python manage.py runserver

    然后我就可以在127.0.0.1:8000中访问了....

    我原以为ubuntu下的软件永远是sudo apt-get install XXX 就可以了,但是经常提示没软件包orz

    网上找了很多,有的写的不完全正确,给坑了,总结一下我自己的搭建流程吧:

    发布django项目到apache上的详细配置  这个算是我找了很久其中一个比较靠谱的,但是有的地方没说清楚,后面又折腾了一下

    这个博客里sudo apt-get install aptitude 这个安装的挺好,aptitude 可以解决什么软件依赖(大概就是经常需要sudo apt-get install时提示依赖问题时候,就改用sudo aptitude install XXX) 还有那个whereis 也挺好的,可以找到一些路径(不过我试过whereis django,whereis mod_wsgi  什么都没找到...)

    文中所写的mod_wsgi一段./configure --with-apxs=/usr/bin/apxs2--with-python=/usr/bin/python2.6,我一开始用了./configure --with-apxs=/usr/bin/apxs2--with-python=/usr/bin/python,还是会报错

    @-PORTEGE-M800:~/download/mod_wsgi-3.4$ ./configure --with-apxs=/usr/bin/apxs2--with-python=/usr/bin/python
    checking Apache version... ./configure: line 1704: /usr/bin/apxs2--with-python=/usr/bin/python: No such file or directory
    ./configure: line 1704: /usr/bin/apxs2--with-python=/usr/bin/python: No such file or directory
    ./configure: line 1705: /usr/bin/apxs2--with-python=/usr/bin/python: No such file or directory
    ./configure: line 1708: /: Is a directory
    
    checking for python... /usr/bin/python
    ./configure: line 1877: /usr/bin/apxs2--with-python=/usr/bin/python: No such file or directory
    configure: creating ./config.status
    config.status: error: cannot find input file: Makefile.in

    我实际是用的./configure (就是没后面那一大串)

    @-PORTEGE-M800:~/download/mod_wsgi-3.4$ ./configure
    checking for apxs2... /usr/bin/apxs2
    checking Apache version... 2.2.22
    checking for python... /usr/bin/python
    configure: creating ./config.status
    config.status: creating Makefile

    用aptitude安装apxs2的时候 第一个处理结果基本上就是保持不变 你选择N的话 会给出第二个处理结果,基本上就是为了协调依赖,有的软件会降级

    我安装的apxs2如下

     whereis apxs2
    apxs2: /usr/bin/apxs2 /usr/bin/X11/apxs2 /usr/share/man/man1/apxs2.1.gz

    cd /etc/apache2 下的httpd.conf 基本上是没问题的(没记错的话这个文件是我自己建的)

     LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so      
      WSGIScriptAlias /  "/home/xuq/metric_tool/django.wsgi"         
      <Directory "/home/xuq/metric_tool">
                     Order Deny,Allow                     
     Allow from all       
     </Directory>

    绿的跟我的是一致,就没有改,红色的地方要改的,比方说你这个project建立在主文件夹下,名叫mysite你的ubuntu用户名叫XXX,那么就是/home/XXX/mysite/django.wsgi  /home/XXX/mysite 了,对齐要不要紧不太了解,还是尽量对齐吧,不过这个代码拷贝进去不太对齐,稍微调节一下吧

    好了,前面说的都没问题,最终问题在这里:找到项目源文件,即metric_tool下面,建立django.wsgi文件

    给的django.wsgi文件关于里面的配置写的不太对(反正我用了不行)

    import os, sys
    WSGI_FILE = os.path.abspath(__file__)
    APACHE_DIR = os.path.dirname(WSGI_FILE)
    PROJ_DIR = os.path.dirname(APACHE_DIR)
    TOP_DIR = os.path.dirname(PROJ_DIR)
    sys.path.append(TOP_DIR)
    sys.path.append(PROJ_DIR)
    os.environ['PYTHON_EGG_CACHE'] = '/tmp/python-eggs'
    os.environ['DJANGO_SETTINGS_MODULE'] = 'metric_tool.settings'
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
    上面黄色背景部分为项目配置文件。
     
    最后重启apache服务器,sudoservice apache2 restart

    这里的蓝字安装我上面说的,那就是mysite.settings了

    问题主要出在

    WSGI_FILE = os.path.abspath(__file__)

    APACHE_DIR = os.path.dirname(WSGI_FILE)

    PROJ_DIR = os.path.dirname(APACHE_DIR)

    TOP_DIR = os.path.dirname(PROJ_DIR)

    sys.path.append(TOP_DIR)

    sys.path.append(PROJ_DIR)

    这一段,作者没告诉我需要修改什么配置,我就这样做,结果配置完成输入localhost变成下面这样子

    继续找,找到一个

    基于mod_wsgi模式安装Django

    只看apache部分就好,其实这里说的WSGIScriptAlias /  /var/www/html/wman/mdash/django.wsgi   我机子上可以cd /var/www  都没html这个文件夹,可能是博主自己加的吧,感觉有点乱,咱们还是按照之前的小白的第一个django project来说,这个文章只需要看最后的代码部分

    import os, sys 
    sys.path.append('/var/www/html/wman')
    os.environ['DJANGO_SETTINGS_MODULE'] = 'mdash.settings'
    os.environ['PYTHON_EGG_CACHE'] = '/tmp/.python-eggs'    #防止PYTHON_EGG_CACHE无权限的问题
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()

    我的django.wsgi文件是这样子的

    import os,sys
    #WSGI_FILE = os.path.abspath(__file__)
    #APACHE_DIR = os.path.dirname(WSGI_FILE)
    #PROJ_DIR = os.path.dirname(APACHE_DIR)
    #TOP_DIR = os.path.dirname(PROJ_DIR)
    #sys.path.append(TOP_DIR)
    #sys.path.append(PROJ_DIR)
    sys.path.append('/home/XXX/mysite')
    os.environ['PYTHON_EGG_CACHE'] = '/tmp/python-eggs'
    os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()

    #注释的都是之前按照上一篇博文添加的,这样一对比,应该就了解了django.wsgi配置

    最后开心的sudo service apache2 restart 

    进去localhost 没有问题,然后进去localhost/admin 我的天哪,瞬间变成大白板

    瞬间觉得惨不忍睹,不会再爱了....

    继续搜索,发现很多这种情况,就是在apache上之后格式丢失...那怎么办呢,好多文章写的太复杂了,就没看,而且之前被坑过,就是按照那种复杂的文章一步一步操作结果情况更糟糕,然后我还不知道怎么还原.....都是泪啊

    但是,找到一个少年的博客很不错,按照上面写的成功解决

    django admin后台css样式丢失

    博主说的这句 "在终端进入python,找到django的路径:

    ‘/Library/Python/2.7/site-packages/django/__init__.pyc’

    由此可见我们的静态文件目录应该为:

    /Library/Python/2.7/site-packages/django/contrib/admin/static/"

    没懂怎么找的,但是他下面说的修改settings,urls的路径是正确的(一步一步cd,发现路径都是存在的,不像之前找的很多文章,路径跟我这边完全对不上...)

    建议一步一步cd 的同时再ls看一下(cd /usr,ls,cd local,ls,.............这样子)

    这是settings.py中添加的内容

    STATIC_ROOT = '/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/'
    STATIC_URL = '/static/'

    这是urls.py中添加的内容

    import settings
    url(r’^static/(?P<path>.*)$’, ‘django.views.static.serve’,{‘document_root’: settings.STATIC_ROOT }),

    import是在前面,后面就是添加在urlpatterns里面应该不用多说了

    不过博主说的刷新后台就成功了,我刷新之后是没反应的,重启apache就可以了  (sudo service apache2 restart)

    来看一下最终页面

    是不是跟之前python manage.py runserver 效果一样呢,至此大功告成(以后终于不用每次都runserver了哈哈~)

    差点忘了提了,每次重启apache就有个报错

     sudo service apache2 restart
    [sudo] password for XXX: 
     * Restarting web server apache2                                                [Sat May 10 15:38:50 2014] [warn] module wsgi_module is already loaded, skipping
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
     ... waiting .[Sat May 10 15:38:52 2014] [warn] module wsgi_module is already loaded, skipping
    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
                                                                             [ OK ]

    解决方法呢,

    Ubuntu Apache2重启提示could not reliably determine the server’e fully…问题解决

    cd /etc/apache2/sites-available

    sudo vim default(个人习惯,有这个文件再vim,不过怕麻烦也可以直接复制到终端(SHIFT+CTRL+C))

    在顶部添加ServerName 127.0.0.1,就没有任何问题啦

    sudo service apache2 restart
     * Restarting web server apache2                                                [Sat May 10 15:42:45 2014] [warn] module wsgi_module is already loaded, skipping
     ... waiting .[Sat May 10 15:42:47 2014] [warn] module wsgi_module is already loaded, skipping
                                                                             [ OK ]
  • 相关阅读:
    请问“javascript:;”是什么意思?
    C++怎么读入非文本文件中的内容
    java 判断数据类型和方法
    Microsoft windows terminal
    webstorm tools window
    What does the dot after dollar sign mean in jQuery when declaring variables?
    File upload with cropping support using Cropper --jquery file upload
    What is httpcontext
    foreach on Request.Files
    jQuery file upload测试
  • 原文地址:https://www.cnblogs.com/foreverwith/p/3720632.html
Copyright © 2011-2022 走看看