抓了不少机器人了
Posts tagged django
Django server和Apache下运行Django的细微差别
Oct 16th
今天把在家调好的网站放到服务器上, 发现不能运行, 提示 ViewDoesNotExist 的异常错误. 一开始以为又是服务器上的文件访问权限问题, 但是 chmod 到 777 之后问题还是照旧, 而且在我本地用”manage.py runserver”运行还是没有问题. 于是乎, 去Python-Chinese的邮件列表寻找答案. 看到limodou有如下一说:
使用apache要复杂些,要把project的路径和它的父路径都加入sys.path中比较方便。而address.view的用法说明它是从project目录开始找的,所以要把project路径加入sys.path. 如果使用开发服务器,manage.py会自动将project的路径和它的父路径都加入sys.path中,而apache要自已来做。
这里已经说的很清楚了, 开发服务器的manage.py会在背后为你做一些事情, 而apache不会, 所以导致了我碰到的这个问题.
其实修改起来也很简单, 除了把路径加入sys.path之外, 还有一个方法就是在urls.py中, 把调用的方法名写成”项目名+模块名+方法名”的形式.
修改前代码: urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'view.index'),
(r'^s/$', 'view.search'),
)
修改后代码: urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'djangotest.view.index'),
(r'^s/$', 'djangotest.view.search'),
)
mod_python和django使用需要注意python egg
Oct 12th
不认识上面几个英文的朋友请忽略本文, 谢谢:)
昨天在配置Django的数据库的时候, 发现了一个奇怪的问题.
在我将数据库设置配置完成后, 在本地用manage.py runserver执行访问都没有问题, 但是放到服务器上用apache+mod_python的方式执行访问的时候, 就会报错. 而且更诡异的是每次报错都不一样. 我观察了一下, 发现基本就是两种错误在来回的报! 一个是说我的middleware有问题, 另一个说是在使用一些egg文件时有问题.
连忙上网搜了一圈, 找到了一些类型的情形, 大家的基本解决方案都指向了django网站的一个网页(看来还是官网好啊).
看完这个介绍以后, 终于明白了问题的所在,剩下的就是按步骤来做了! 不过这里还有一个小技巧.
报egg使用有问题的错误时, 错误信息中写的很详细, 大概意思是说因为我没有配置using eggs with mod_python 中所说的cache目录, 所以默认要使用”/.python-eggs”目录作为cache目录. 而我的服务器上并没有这个目录, 所以才会报错.
这样就简单了, 我就建一个这个目录呗, 再把权限一改, 再一试, 嘿嘿~~~齐活!
不想麻烦的朋友, 如果遇到这个问题能看到他需要的目录, 可以采用我的方法:)
在Media Temple(dv)上安装配置Django
Oct 10th
在Media Temple(dv)上安装使用Django
选择 MT , 除了他那些知名的客户群, 还看上了他 VPS 系统的高可配置性. 独立的虚机可以让你在上面安装任何你需要的东西, 当然, 你也要懂得怎么去操作.
自己的 Django 项目已经有些雏形了, 所以也要考虑让他能在 MT 上运行了. 虽然前段时间 MT 对他的 (gs) 服务提供了 Django 的支持, 但是 (dv) 服务还是没有官方的 Django 支持, 所以我只能自己动手来安装配置了!
经过一番摸索和尝试, 以及 Richard 同学(这位同学是我在 Django 的 maillist 上找到的可以骚扰的人^_^)的帮助, 我终于在自己的站点上看到了”Worked”的字样. 自己在网上搜索相关资料的时候一直没有看到有人写在 MT 上安装 Django 的经验, 那么我就作为第一个吃螃蟹的人吧, 希望大家在搜索”mt django”关键字的时候能搜到我的文章:) (是否需要再写一篇英文的?)
好吧, 我们开始干活了! 大家在模仿的时候请注意修改你自己的域名和子域名.
- 在自己的域名下建立一个子域名, 方便我们干活. 我在我的 nickcheng.com 域名下建立了一个 lab.nickcheng.com 子域名. 这个工作在 plesk 下就可以搞定.
- 取得 MT 的 Shell 权限, 并且获得自己的 root 密码, 因为我们需要比较高的权限来做这些事情. root 密码需要在 MT 中提交一个 Support 来获取.
- 进入 Shell 模式, 切换到 root 权限(使用 su 命令)
- 切换到子域名 lab 所在的目录, 并建立 Django 目录, 下载/解压缩 Django
cd /var/www/vhosts/nickcheng.com/subdomains/lab
mkdir django
cd django
wget http://www.djangoproject.com/download/0.96/tarball/
tar xzvf Django-0.96.tar.gz
- 安装 Django
cd /var/www/vhosts/nickcheng.com/subdomains/lab/Django-0.96
python setup.py install
上面的步骤如果没错的话, Django 就已经在你的服务器上安装好了. 为了验证一下, 我们可以使用如下的步骤.
python
import django
如果没有报错, 那么就证明我们的已经成功安装了 Django. 接下来是配置 Django 站点了.
- 首先不建议把你的 Django 网站的源代码放在 httpdocs 目录下, 因为这样如果操作不当, 会有可能给别人下载你源码的机会, 所以我还是把 Django 网站的源代码放在了之前建立的 django 目录中.
cd /var/www/vhosts/nickcheng.com/subdomains/lab/django
django-admin.py startproject djangotest - 建立了 djangotest 这个 django 网站后, 就是最重要的配置步骤了. 我们先切换到配置文件所在的目录
cd /var/www/vhosts/nickcheng.com/subdomains/lab/conf - 这时这个目录应该是空的, 我们需要自己建立配置文件. 因为 MT 自带了 vi, 所以我用它来做这个事情
vi vhost.conf - 关于 vi 的操作还请大家自己学习. 我贴一下我的 vhost.conf 文件的内容
<location>
SetHandler python-program
PythonPath "['/var/www/vhosts/nickcheng.com/subdomains/lab/django/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE djangotest.settings
PythonDebug On
</location>- 第一行, Location 后的路径不是指磁盘上的路径, 而是用户访问网站的路径. 我这里用 “/” 是指用户访问http://lab.nickcheng.com时的配置.
- 第二行, 指明这个路径下使用的Handler, 这里使用python
- 第三行, 指明你的 Django 网站源码所在的路径. 需要注意的是, 这里的路径要写你执行 django-admin.py 文件时所在的目录.
- 第五行, 要写完整你建立的 project 的 settings.
- 配置完成后, 我们需要重启服务来让他生效.
/usr/local/psa/admin/sbin/websrvmng -a -v
现在访问 http://lab.nickcheng.com, 应该可以看到 “It worked!” 的字样了:) 我们成功了
djangobook 第四章中的遗漏
Aug 25th
在建立模板对象(Creating template objects)这一小节中, 会让读者在解释器下简单试用一下基本函数, 但是这里讲的太简单的, 如果没有对环境进行很好的设置的话, 这几句简单的试用语句是会出错的!
解决方法是要增加两个Windows的环境变量:
PYTHONPATH = c:\temp
DJANGO_SETTINGS_MODULE = mysite.settings
这里假定我是在 c:\temp 目录下执行的 django-admin.py startproject mysite 来建立的我的工程