部署完毕后,感觉好简单好简单,但是这么简单的配置竟然浪费了我1天。通过这件事情,我明白了依葫芦画瓢是有前提的,你必须理解他的原理和架构。
因为在linux上不是太熟悉,和操作性太差,先在windows上试手。
在上一篇安装mod_wsgi成功后,部署django 应用程序一直无法打开。
按照google搜索到的文章在windows下一步步安装成功!
才发现如此简单,发现自己在linux下的错误竟如此的荒谬!
在linux上失败,主要的原因为全部照抄。不懂原理。
现在讲讲我所理解的。
关键点:
1,apache的配置
WSGIScriptAlias / "/home/testadmin/helloworld/wsgi.py"
<Directory "/home/testadmin/">
Order Deny,Allow
Allow from all
</Directory>
以上解释:
WSGIScriptAlias 为脚本路径,意思为在浏览器中输入http://localhost/后,apache服务器会调用wsgi.py脚本。
我犯得错误,教程中写的django.wsgi,我也在配置文件中写,我不会看日志文件,所以也不知道在这里发生问题,我只会用排错法。
这个文件必须存在,并且为绝对路径。
Directory为放项目程序的绝对路径,这个路径一定为程序的根路径,不能在后面再加上helloworld文件夹。我犯过这个错误,因为我不知道怎么去做,只好一步步测试,很傻。
2,wsgi.py需要修改
因为刚开始根本就没有接触到这个文件,直接新建的文件,所以肯定无法成功,在widnows上测试成功后,才知道该文件是变量,名字可以任意的,
"""
WSGI config for helloworld project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os,sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "helloworld.settings")
sys.path.append('/home/testadmin/')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
其中有一句原来的开发环境中是没有的,如果不添加该句,也是无法部署成功。我亲测过。
该句主要将系统环境变量中增加在apache设置的目录,必须一致。
不知道这句话添加上去具体的作用,但是知道不添加这句话肯定是不行的。
有谁知道的可以告知!
Thu Sep 11 18:45:10 2014] [error] [client 218.29.222.202] File "/usr/local/lib/python2.7/dist-packages/Django-1.7-py2.7.egg/django/conf/__init__.py", line 98, in __init__
回复删除[Thu Sep 11 18:45:10 2014] [error] [client 218.29.222.202] % (self.SETTINGS_MODULE, e)
[Thu Sep 11 18:45:10 2014] [error] [client 218.29.222.202] ImportError: Could not import settings 'helloworld.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named helloworld.settings
[Thu Sep 11 18:45:45 2014] [notice] caught SIGTERM, shutting down
[Thu Sep 11 18:45:46 2014] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
看了下apache日志,发现应该是无法导入helloworld.settings路径导致。将目录添加到系统变量后,项目设置就可以找到。应该和apache ,mod_wsgi运行机制有关