设为首页 收藏本站
查看: 648|回复: 0

[经验分享] Linux环境中的Mod_perl编程介绍

[复制链接]

尚未签到

发表于 2016-2-24 15:34:47 | 显示全部楼层 |阅读模式
您正在浏览的Linux|Unix是Linux环境中的Mod_perl编程介绍
1. 介绍性指南
mod_perl 是个庞大而复杂的工具,它内建了许多模块帮助你方便地构建动态网站。这篇指南的目的是帮助你构建一个良好的 mod_perl 模块,并从中理解 mod_perl 的实现技术。我并不推荐使用这里介绍的技术来建立一个大型站点,尤其对于一个刚刚涉足 mod_perl 的人来说。但我推荐大家可以深入看一下它的一些内建的方案,比如 Mason, AxKit, EmbPerl, Apache::ASP 和 PageKit 等等。

1.1. 你需要什么?
本指南假设你已经有过安装和测试 mod_perl 的经验。以及较新版本的 Apache 的安装经验。因为有可能你需要在你的机器上实现时适当的修改本文提供的配置。我们需要你安装一些模块并且需要进入 Apache 的配置目录作修改。所以最好你有 root 权限来做这些事情。当然你还需要一个文本编辑器。

1.2. 切入正题
mod_perl 模块也是 Perl 模块,但它有较为特别的设计。最方便的创建一个 Perl 模块的方法就是使用标准的 Perl 分发自带的工具 h2xs 。你可以在命令行模式键入 h2xs 来看看它的参数列表。现在,到一个适当的目录开始一个新项目,键入:

h2xs -A -X -n Apache::Tutorial::First

h2xs 将会创建目录 Apache, 以及其他一些子目录.现在进入最深一级的目录看看:

cd Apache/Tutorial/First

在这个新目录里面,你可以看到 5 个文件: Changes, First.pm, MANIFEST, Makefile.PL 和 test.pl。它们的作用如下:

Changes

这个文件作为你的项目的修改日志(changelog)文件

First.pm

这是主模块文件,包含你的 mod_perl 句柄代码(handler code)。

MANIFEST

本文件用于自动构建 tar.gz 类型的模块版本分发。这样你就可以把你的模块拿到 CPAN 发布或者分发给其他人。它包含了你在这个项目中所有文件的列表。

Makefile.PL

这是标准的 Perl Makefile 构造器。用于创建 Makefile.PL 文件来编译该模块。

test.pl

针对该模块的一些测试脚本。默认情况下它只是检查模块的编译和载入

好了,现在我们开始把 First.pm 变为可工作的 mod_perl 模块。使用文本编辑器打开该文件,修改后的内容如下:

package Apache::Tutorial::First;

use strict;

use vars qw/$VERSION/;

use Apache::Constants;

$VERSION = 0.01;

sub handler {

my $r = shift;

$r->send_http_header('text/html');

print "<html><body>Hello World</body></html>";


return OK;

}

1;

不要忘记文件末尾的"1;",对于 Perl 来说,一个模块最后返回的非零值表示该模块已经被成功编译。

1.3. 安装你的模块
h2xs 工具使我们的模块安装工作极为方便。在和你的 First.pm 文件相同的目录中。、,键入:

perl Makefile.PL

make

make test

如果 make test 成功的话,你需要以 root 身份执行:

make install

这样你就把你的模块安装到了 perl 的库目录(library directory)。

1.4. 添加该模块为 Apache 的一个句柄(handler)现在我们需要进入 Apache 配置目录来修改配置文件,使我们的模块作为 Apache 内容处理阶段的处理器。打开 httpd.conf 文件,在末尾加入如下配置:

<Location /mod_perl_tutorial>

SetHandler perl-script

PerlHandler Apache::Tutorial::First

</Location>

然后保存配置文件,并且重新启动 apache 服务器:

apachectl stop

apachectl start

现在使用浏览器访问 http://localhost/mod_perl_tutorial ,你将如期的看到显示 "Hello World" 页面。

2. 这里都发生了些什么? 好,在这里都发生了什么事情呢?

当 Apache 启动的时候,它读取它的配置指令并把适当的命令传递给相应的处理该命令的模块。这里有两个相关的指令 SetHandler 和 PerlHandler.

第一个指令 SetHandler 由 mod_mime 模块处理,该指令表示使用什么模块作为处理请求的主要部分。这里所设置的 perl-script 表示使用 mod_perl 来处理请求。

第二个指令 PerlHandler 由 mod_perl 模块来处理,它只是简单的说明使用我们的模块来处理请求的主要部分。有一点需要注意,无论何时在你有一个 PerlHandler 时,你需要相应的 SetHandler perl-script 配置指令。这样才能使你的 mod_perl 代码起作用。我总是认为这是一个弱点,但这将涉及 Apache 内部的处理机制,所以在将来这也很难改变。

现在请求来了,Apache 查看用什么模块来处理相应的 URI 并且在这里决定使用 mod_perl,而 mod_perl 知道它必须把请求发送给我们的模块,并调用我们模块的 handler() 函数作为 Apache::Request 对象的第一个参数。而我们的 handler() 函数的返回值决定了下一步 Apache 将要做什么。现在我们知道返回值 OK 意味着一切成功。 OK 是个从 Apache::Constants 模块导出的常量。

3. 调试
如果你没有看到 "Hello World", 那你可能看到了一个错误页面,或者其他什么完全不同的。第一步去查看错误日志看看到底是什么发生了错误。我习惯于在浏览器中请求后立即查看错误日志。你可以使用 tail 工具:


tail -f /path/to/apache/logs/error_log

(使用你的真实 error_log 路径替换上面的路径。如果你不肯定它在哪里,查看你的 httpd.conf 文件的 ErrorLog 指令部分)

现在重新载入页面,然后 error_log 将告诉你什么地方出现了问题。更多的关于 perl 调试,请参见 perldebug.

4. 加入更多
现在如果你想要针对上面的情况作一些修改,该如何做呢?不幸的,唯一一种安装模式如下:

修改你的 First.pm 文件

重新以 root 身份运行 make install

重新启动 Apache

这也许很麻烦,特别是重新启动 Apache。针对这个问题,我们可以另外安装一个特别设计的模块来避免每次这样麻烦的做。首先你需要从 CPAN 下载并安装 Apache::Reload 模块(除非你已经使用 mod_perl 1.26 或者更高版本)。在这里 http://search.cpan.org/search?dist=Apache-Reload 下载。

解开 tar.gz 文件并进入新目录,执行:

perl Makefile.PL

make

然后到 root 身份执行:

make install

现在再次打开 httpd.conf 文件,加入:

PerlInitHandler Apache::Reload

这将测试所有有所改变的模块并在必要时自动重新载入新模块。这对于开发来说很有用,但会有性能损失,所以在开发完成之后,就将该特性关闭。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-182334-1-1.html 上篇帖子: Oracle9i(R2) for linux 安装指南 下篇帖子: Linux环境下让JDK支撑中文
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表