Perl 和 Amazon 云,第 4 部分:深入探究完整 mod_perl 站点的代码库
2010-02-04 00:00:00 来源:WEB开发网我们在这里没有使用 Net::Amazon::S3 模块,但是我们本来可以使用的(我在 第 2 部分 中提到过)。为了保持简单,因此在制定架构决策时决定不使用这个模块;在介绍上传时将详细讨论这点。
清单 4 展示了 SharePerlHandler.pm 的全局设置。
清单 4. SharePerlHandler.pm 的全局设置
use constant IMAGE_MODE => 0;
use constant COMMENT_MODE => 1;
use constant VERBOSE => 1; # can also be done through the environment or some other way
my $template = Template->new( {
INCLUDE_PATH => '/home/tzz/templates/share',
RECURSION => 1,
}
);
my $uuid = Data::UUID->new();
您需要使用常量来表示基本 SimpleDB 操作的照片模式和评论模式,因此在此处定义它们。VERBOSE 常量可用任何其他方法代替,以控制服务器的详细记录。记住,对冗详细记录的动态控制越多,它的成本就越高(因为服务器需要每次进行检查)。
接下来,您将获得一个全新的 $templates 对象(将从 /home/tzz/templates/share 加载模板并递归)。最后,您获得一个 UUID 生成器,可以在任意位置使用。
主处理程序
是的,主处理程序非常重要,奇迹将在这里发生。所以,一定要多加注意!(醒来了?很好!)仔细查看清单 5。
清单 5. 更多全局设置
sub handler
{
my $r = shift @_;
my $q = Apache::Request->new($r,
POST_MAX => 4096,
DISABLE_UPLOADS => 1);
my $user = (rand 2 > 1) ? 'bob' : 'ted';
# pick a user randomly between bob and ted
# (50% chance each)
handle_photo($q);
# always try to delete, add, or edit a URL
# if it's passed as a parameter
handle_comment($q);
# always try to delete, add, or edit a comment
# if it's passed as a parameter
my $uri = $q->uri();
my $tfile = $uri;
$tfile =~ s,^/,,; # remove the starting "/" in the name if it exists
$tfile =~ s,/$,,; # remove the ending "/" in the name if it exists
$tfile =~ s,/,_,g; # "/" in the file name becomes "_" so all the
# templates can be in one directory
$tfile = 'index' unless length $tfile;
# make the URI "index" if it's
# empty (e.g. someone hit the / URI)
if ($tfile =~ m/\.html$/)
{
$tfile =~ s/html$/tmpl/; # map ANYTHING.html to ANYTHING.tmpl
}
else
{
$tfile .= '.tmpl'; # map ANYTHING to ANYTHING.tmpl
}
my $policy = '';
my $signature = '';
if ($tfile eq 'upload.tmpl')
{
$template->process('policy.tmpl',
{
username => $user,
},
\$policy) || croak($template->error());
my $key = $ENV{AWS_SECRET_KEY};
$policy = encode_base64($policy);
$policy =~ s/\n//g;
$signature = encode_base64(hmac_sha1($policy, $key));
$signature =~ s/\n//g;
}
$q->send_http_header('text/html; charset=utf-8');
my $output = '';
$template->process($tfile,
{
request => $q,
username => $user,
policy => $policy,
signature => $signature,
env => \%ENV,
params => \%{$q->param()},
fimages => sub { return list_simpledb(sprintf('SELECT * from `%s`',
simpledb_image_domain_name())) },
fcomments => \&get_comments,
},
\$output) || croak($template->error());
print $output;
return OK;
}
- ››Perl 6 发布
- ››部分 WM6.5 手机有望升级到 Windows Phone 7
- ››Perl 和 Amazon 云,第 1 部分:通过构建简单的照...
- ››Perl 和 Amazon 云,第 2 部分:通过 HTML 表单将...
- ››Perl 和 Amazon 云,第 3 部分:上传图像并创建、...
- ››Perl 和 Amazon 云,第 4 部分:深入探究完整 mod...
- ››Perl 和 Amazon 云,第 5 部分:了解完整 mod_per...
- ››部分英特尔芯片不支持Windows 7“XP模式”
- ››Perl的5个常见错误
- ››Perl操作mysql数据库的方法
- ››Perl的经典用法
- ››部分VZPP无法正常访问怎么解决?
更多精彩
赞助商链接