原谅我这个小白到现在才搭建好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 ]