首页 > 代码库 > ubuntu12.04下django-apache配置

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 servers 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 servers 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 ]