看着论坛上的高手们发表的帖子,经常想自己什么时候也能写一些这样的帖子呢?
用Zope构件web服务是一个比较新的技术,最近想搞个电子商务的网站.反正又没有客户,自己玩玩的,就选了这个技术.国内资料并不多,所以基本上是模着石头过河,我也只是初学.这仅当是自己的学习笔记吧.第一次写,大家多提意见阿.
运行环境:althon 650+196M+freebsd 5.2+ zope2.6.2
一 安装zope
我用的是freebsd,用ports collection装的.
具体安装不再讨论之内.
二 必要的设置
更改Zope站点实例的位置,这是我使用zope面临的第一个问题,zope装好以后就可以使用(当然还要改一下var的权限,下面再讲),但是实例是在 zope的安装目录下的,我的是/usr/locla/www/Zope/.对于大型的网站这当然不行.所以要更改实例的位置.同时还应该为网站专门设立一个专门的用户.
看看我的做法:
首先建立一个用户,我的是webroot,最好让他属于wheel组,可以用su切换用户,这样调试起来比较方便.
用make_instance创建实例.
zope有一些用于配制的实用程序,在安装目录的inst目录下有一个make_instance.py,可以在指定目录创建一个实例
代码:
cd /usr/local/www/Zope/inst/
python make_instance.py
引用:
The instance home is the directory from which you will run Zope.
Several instance homes, each with their own data and
configuration, can share one copy of Zope.
Instance home [/usr/local/www/Zope]: /home/www/site2
'/home/www/site2' does not exist.
Shall I create it [y]? y
Created.
Created 'Extensions' directory.
Created 'import' directory.
Created 'Products' directory.
Created 'var' directory.
Created default database
------------------------------------------------------------------------------
Now to create a starting user. Leave the username blank if you want to skip this step.
------------------------------------------------------------------------------
Please choose a username and password.
This will create the initial user with which you manage Zope.
Username: webroot
Password:
Verify password:
chmod 0644 /home/www/site2/inituser
冒号后面是要输入的东西.先是创建实例的路径"/home/www/site2",没有这个目录,提示是否建立,打"y",然后是zope管例员的名字、密码.这里的管理员不是freebsd里的用户,而是在Zope内部的管理员,以后登陆ZMI(Zope Management Interface)时要用到.
然后要将实例目录中的var目录改为root拥有,
代码:
su
cd /home/www/site2
chown -R root var
改var的mod
代码:
chmod -R 1777 var
这样改的原因Zope Book上有说明.
启动zope前必须设置环境变量INSTANCE_HOME,指向实例的目录
代码:
export INSTANCE_HOME=/home/www/site2
然后启动zope,以root用-u指定运行时的用户.我以一般用户身份启动zope没成功过,显示
引用:
-bash-2.05b$ /usr/local/www/Zope/start
/usr/local/www/Zope/start: Can't open /usr/local/www/Zope/start: Permission denied
以root身份
引用:
su-2.05b# /usr/local/www/Zope/start -u webroot
------
2004-01-30T23:03:37 INFO(0) zdaemon Started subprocess: pid 821
------
2004-01-30T23:03:41 INFO(0) ZODB Opening database for mounting: '146941056_1075330297.506043'
------
2004-01-30T23:03:41 INFO(0) ZODB Mounted database '146941056_1075330297.506043' at /temp_folder
------
2004-01-30T23:03:41 INFO(0) ZServer HTTP server started at Fri Jan 30 23:03:41 2004
Hostname: hydrogen.lan
Port: 8080
------
2004-01-30T23:03:41 INFO(0) ZServer FTP server started at Fri Jan 30 23:03:41 2004
Hostname: hydrogen.lan
Port: 8021
------
2004-01-30T23:03:41 INFO(0) ZServer PCGI Server started at Fri Jan 30 23:03:41 2004
Unix socket: /usr/local/www/Zope/var/pcgi.soc
然后就就停在那里了.用浏览器试试,我在内网用windows看http://10.0.0.22:8080/就是zope的欢迎页.需要注意的是zope默认的web服务是在8080端口的.
停止服务ctrl+c就行了.
如果要真正对这个zope实例进行修改的话,应该使实例目录由-u指定的目录拥有,
确认一些是否如此,否则以后实用会出现文件不能修改等问题.
可以在修改var属性之前先
代码:
chown -R webroot /home/www/site2
接着让开机时就运行zope,我装完zope的时候在/usr/local/etc/rc.d下已经有一个zope.sh.sample脚本了,以这个脚本为蓝本,下面是我的zope.sh,可以自己修改参数
代码:
su-2.05b# cat /usr/local/etc/rc.d/zope.sh
#!/bin/sh
#you can change it begin
export ZOPEROOT=webroot
export INSTANCE_HOME=/home/www/site1
#you can change it end
case "$1" in
start)
umask 077
nohup /usr/local/www/Zope/start -w 80 -f 21 -m '' -u $ZOPEROOT -p /usr/local/www/cgi-bin/Zope.cgi >> $INSTANCE_HOME/zope-output 2>&1 &
echo -n " Zope"
;;
stop)
/usr/local/www/Zope/stop
echo -n " Zope"
;;
*)
echo "Usage: `basename $0` {start|stop}" >&2
;;
esac
exit 0
这样zope服务器就基本配成了.