- 论坛徽章:
- 0
|
Author:Alex Gu <gusg AT livedoor.cn>
MSN:gsging000 AT hotmail.com
转载请保留作者信息.
前言
一门语言如果有一个或多个成熟的开发框架很容易引起人们的兴趣,比如PHP的Zend,Ruby的Ruby On Rails等等.Perl语言也有了让我们在进行快速开发的同时对Perl的未来充满的信心的Catalyst.
然而Sledge作为隐藏在Perl语言中的为数不多Web应用框架目前还并为被Perler所广泛了解.Sledge相关的介绍性文字在本来就稀缺的Perl资料中更是遥无踪影.
本文的目的是希望能够促进Perler,尤其是Perl Web Developer对Sledge的了解.
笔者愿意为Perl、愿意为Sledge的推广作贡献.由于本人水平有限,文章内容也是在项目中慢慢总结出来的.如有错误之处,请指出,我会立即修改.
一、什么是Sledge
Sledge是一个基于Apache运行的企业级MVC Web应用框架,可以同时使用CGI和mod_perl两种方式运行.它拥有丰富的二次开发接口,可以与目前流行的许多应用进行结合,例如:SSO、WebService等.
Sledge框架集成了Perl的众多经典模块:
- Model:
- Class::DBI Class::Accessor Class::Data::Inheritable等
- View:
- Template_Toolkit HTML::Template HTML::Parser等
- Controller:
- Sledge以页面为向导,通过定义页面与模块的对应关系实现模块对页面的控制.
复制代码
Sledge在英语里是有雪橇、大锤的意思。作者之所以为这个框架起这个名字,可能是象征着程序员使用这个框架在开发过程中好像坐雪橇滑雪一样流畅,而在开发过程中也是不失大锤般有力的工具.
二、获取Sledge
Sledge是一套由很多模块组成的程序,同时拥有丰富的插件模块帮助我们进行对应各种常见的需求.
我们可以通过以下几种途径获得:
1、CPAN:您可以在CPAN上搜索关键字"Sledge",网页会向您展示所有Sledge相关的模块.
2、HomeSite:您可以在Sledge的老巢http://sl.edge.jp/download.html进行下载.
3、Sourceforge:您可以在http://sourceforge.jp/projects/sledge页面找到Sledge的相关下载.
4、其他:如果您使用的是FreeBSD操作系统,那么您可以在/usr/ports/www/p5-Sledge/目录下面找到Sledge.同时/usr/ports/www/目录下还有很多以"p5-Sledge-"开头的目录,这些目录存放着其他Sledge插件及扩展程序.
说明:
本文推荐您使用下载方式(即2、3方式),只需下载Sledge-1.11.tar.gz即可.
如果您使用FreeBSD Ports方式安装只需进入/usr/ports/www/p5-Sledge/目录执行make install clean命令即可.
三、安装
0、本文示例环境如下:
- OS:FreeBSD 6.0-RELEASE
- Web:Apache-1.3.31+mod_perl-1.29
复制代码
1、在您的系统中要配置好Apache+mod_perl或Apache+CGI环境,一般进行企业级开发还有有可能会用到mod_proxy_pass等Apache模块.请根据您的实际需要进行安装.本文不赘述.
如果您使用FreeBSD Ports方式安装Sledge,那么这些步骤您就可以不用考虑了,因为Ports已经自动为您安装了Apache-1.3.31/mod_perl-1.29环境.
2、Sledge提供了多种存储Session的方式(后文会详细说明),如果您打算使用数据库存储Session的话,那么您需要在服务器上安装数据库环境,本文以Mysql为例.本文不赘述数据库安装过程.
3、加压缩Sledge-1.11.tar.gz.
- # tar zxf Sledge-1.11.tar.gz
复制代码
4、与其他开发环境一样,Sledge的应用同样需要其他模块的协助.Sledge开发组已经为用户写好安装脚本,用户直接运行即可.
- # cd Sledge-1.11/eg
- # perl cpan_install.pl
复制代码
说明:
1)、该脚本的主要功能是读取当前目录下的prereq-modules文件中列出的模块名称,并通过CPAN.pm进行安装.由于实际服务器环境的多样性,可能在安装过程中导致不能顺利完成的情况,例如make test过程出错等.笔者建议您下载这些模块然后可以自己写安装脚本,跳过make test过程.
2)、在命令行中执行以下命令同样可以完成以上任务:
- # perl -MCPAN -e "install Bundle::Sledge"
复制代码
Bundle::Sledge是专门用来安装Sledge相关模块的Bundle类型模块.
5、安装Sledge
- # cd ..
- # perl Makefile.PL
- # make
- # make install
复制代码
6、Session存放
如果您使用Mysql存储Session,则需要建立存放Session的表,建表语句如下:
- mysql > CREATE DATABASE Sledge;
- mysql > use Sledge;
- mysql > CREATE TABLE sessions (
- mysql > id char(32) not null primary key,
- mysql > a_session mediumtext,
- mysql > timestamp timestamp
- mysql > );
复制代码
7、Sledge还借助Memcached将程序运行过程中的很多信息放入内存中以提高存取速度,您还需要进行如下操作:
- # fetch http://www.danga.com/memcached/dist/memcached-1.1.12.tar.gz
复制代码
memcached运行需要用到libevent.
- # fetch http://monkey.org/~provos/libevent-1.1a.tar.gz
- # tar zxvf libevent-1.1a.tar.gz
- # cd libevent-1.1a
- # ./configure && make
- # make install
- # make verify
- # cd ..
- # tar zxvf memcached-1.1.12.tar.gz
- # cd memcached-1.1.12
- # ./configure --with-libevent=/usr/local
- # make
- # make check
- # make install
- # cat > /usr/local/etc/rc.d/memcache.sh
- /usr/local/bin/memcached -d -uroot -m 512 -p 12345
- # chmod +x /usr/local/etc/rc.d/memcache.sh
复制代码
这种方式的好处是:速度快;缺点是:耗内存,企业级应用的话最好有单独的Cache Server.
至此,Sledge环境的安装工作已经基本结束.
四、基于Sledge的开发过程简介:
1、新建项目
安装Sledge后,会在系统路径下找到一个名为sledge-setup的程序:
执行后生成了如下文件
- Sledge/Config/_common.pm #整个Sledge架构的配置文件.
- Sledge/Config.pm #整个Sledge架构调用配置文件的接口
- Sledge/Pages.pm #初始化页面对象,为以后使用作准备.
复制代码
开发者需要配置Sledge/Config/_common.pm中的一些参数,请根据自己项目的实际需要进行修改.Sledge Team最近又提交了使用YAML进行配置的模块,详情请参考http://search.cpan.org/~mikihoshi/Sledge-Config-YAML-0.02/lib/Sledge/Config/YAML.pm.
为了使整个项目更有条理我们对项目的文件目录作如下调整:
- # cd /path/to/Sledge
- # mkdir etc #存放Apache配置文件
- # mkdir -p lib/Sledge/Pages #存放所有pm模块
- # mkdir view #存放所有TT编写的页面文件
- # mv Config* Pages.pm lib/Sledge
复制代码
2、修改Apache配置文件,加入如下内容:
- PerlRequire /path/to/Sledge/etc/startup.pl
- <Location /sledge_www>
- SetHandler perl-script
- PerlHandler Sledge::Dispatcher::Properties #Sledge的运行从Sledge::Dispatcher::Properties开始,详细情况笔者会在后续文章中介绍.
- PerlSetVar SledgeMapFile /path/to/Sledge/etc/map.properties
- AddAcceptForwarder All
- </Location>
复制代码
3、新建map.properties对应文件
- # cat > /path/to/Sledge/etc/map.properties
- / = Sledge::Pages::Index #建立Page与PM的对应关系
复制代码
4、建立startup.pl文件
- # cat > /path/to/Sledge/etc/startup.pl
- #!/usr/bin/perl -w
- use strict;
- use lib qw(/path/to/Sledge/lib);
- use Sledge::Pages; #这个模块必须预先加载,因为它初始化了一个Apache Request对象.
- use Sledge::Pages::Index;
- 1;
复制代码
5、指定配置文件名称
- # cat > /path/to/Sledge/etc/Sledge-conf.pl
- $ENV{SLEDGE_CONFIG_NAME} = ''; #如果不指定则Sledge默认只读取Config/_common.pm文件.
- 1;
复制代码
如果您正在不同的环境维护同一套代码,比如一个开发环境,一个生产环境.
您可以把不同环境的参数放入不同的配置文件,把不同环境的共同参数放入_common.pm中,这样在不同环境指定不同的配置文件就可以很方便的管理代码.
Sledge会首先读取_common.pm的参数,然后读取$ENV{SLEDGE_CONFIG_NAME}指定的配置文件,如果_common.pm中有与$ENV{SLEDGE_CONFIG_NAME}重复的代码,则后者会覆盖前者.
6、建立Index.pm
- # cat > /path/to/Sledge/lib/Sledge/Pages/Index.pm
- package Sledge::Pages::Index;
- use strict;
- use base qw(Sledge::Pages);
- __PACKAGE__->tmpl_dirname('.'); #指定TT文件相对路径为根目录,TT根路径请在Config/_common.pm中的$C{TMPL_PATH}中指定.
- sub dispatch_index {
- my $self = shift;
- $self->tmpl->param(content => "Hello World!"); #往页面中返回一个变量content,内容为Hello World!
- warn "Now you r looking the error log.\n"; #在apache的error-log中打印"Now you r looking the error log."
- }
- 1;
复制代码
7、建立页面文件,页面文件使用Template-Toolkits语法编写
- # cat > /path/to/Sledge/view/index.html
- <HTML>
- <HEAD>
- <TITLE>The first Sledge Page</TITLE>
- </HEAD>
- <BODY>
- the Content is [% content %]<br>
- </BODY>
- </HTML>
复制代码
8、重新启动Apache,访问http://your.ip.here/sledge_www/ 您会看到"the Content is Hello World!"字样,同时您可以在apache的error-log中看到"Now you r looking the error log."字样.
五、结尾
与Catalyst相比较,Sledge没有Catalyst那么轻盈的体态,也没有那么完善的文档,更没有那么使出学者轻松上手,但Sledge是一个功能强大的Web应用框架是一个不争的事实,
它集成了很多Web程序开发必备的模块,例如:页面分发、身分验证、数据库操作、字符集转换、Cache处理、日志记录、开发调试、文件控制、WebService等等.
如果您真正了解了Sledge,尝试过基于Sledge的二次开发,您会对它爱不释手.
在Sledge基础上进行二次开发,国内目前也有一些非常成功的应用,这些都使Sledge的使用者感到非常兴奋.
关于Sledge更多的内容笔者会在后续的文章中继续介绍.
期待Sledge为更多人了解,为更多人使用.
六、支持
Sledge主页:http://sl.edge.jp/
[ 本帖最后由 gsging 于 2007-5-5 19:01 编辑 ] |
|