技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> 应用中的静态文件

应用中的静态文件

浏览:1472次  出处信息

最开始几个文章讲的使用 plackup 来服务当前目录的文件,现在我们学习了怎么样使用中间件和怎么使用 URLMap 来服务多个应用。这又是非常琐碎的功能之一, 你的应用开发所必须的:服务静态文件.

从指定的路径请取文件
很多的框架自己实现了这个功能,但使用了 PSGI 和 Plack 起,框架可以不需要实现此功能了。只需使用 Static 中间件。

use Plack::Builder;
 
my $app = sub { ... };
 
builder {
    enable "Static", path => qr!^/static!, root => './htdocs';
    $app;
}

这会截取全部以 "/static" 的 request,然后映射到 root 目录 htdocs 目录。所以当你请求 "/static/images/foo.jpg" 结果会返回 "./htdocs/static/images/foo.jpg" 这个文件。
常常,我们会想重命名和配置一个目录的名字为一个新的名字,如请求 "/static/index.css" 映射到 "./static-files/index.css",你只要如下操作就行:

builder {
    enable "Static", path => sub { s!^/static/!! }, root => './static-files';
    $app;
}

这有个重要的地方,就是使用的回调函数中的 patterm 是使用的 sub {s///} 来替换正则 qr.这个回调中 matche 到的 $_ 会做为 request 的路径,所以在这个地方使用的  来替换掉前面一部分。所以会这时前的 static 就会没有了,直接打开 root 下的 "./static-files/" 目录
因此,"/static/foo.jpg" 会被指到 "./static-files/foo.jpg",全部的请求如果不能 match 这个正则的话,就通过源始的路径到 $app 中来。
在 Perl 中讲任何事情都不只一个以上的方式去做。当你了解如何使用 mount 和 URLMap 然后使用 App::File 的 mount 应该更加直观。前面的例子可以这样写:

use Plack::Builder;
 
builder {
    mount "/static" => Plack::App::File->new(root => "./static-files");
    mount "/" => $app;
};

这的方法不同,但我想前面这个比现在这个更加常用,因为上面的 Static 的静态中间件的回调,是使用基于配置的路径,让你可以写更加复杂的正则。当你不合适使用 URLMap 和 mount 选择上面的方法是更加合适你的。

这是我的译文,原文件地址:http://advent.plackperl.org/2009/12/day-17-serving-static-files-from-your-application.html

建议继续学习:

  1. 当使用 Nginx 做 Hash 时对动态文件和静态文件的处理    (阅读:3276)
  2. Django的静态文件服务 总结    (阅读:2496)
  3. PHP抽象静态方法    (阅读:1510)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
后一篇:级联多个应用 >>
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1