使用Catalyst从CDN提供静态文件

时间:2012-02-13 04:57:51

标签: perl cdn catalyst

我正在尝试从CDN而不是/ static文件夹提供所有静态文件(js,css,images)。我开始编写自己的子来重写图像URL:

sub uri_for_image { 
    my ( $c, $path, @args ) = @_; 
    my $uri = $c->uri_for($path, @args);

  if (MyApp->config->{use_cdn}) {
    my $cdn = MyApp->config->{cdn_location};
    $uri = $path;
    $uri =~ s/^/$cdn/si;
  } 

return $uri;
}

但后来我意识到要自动重新路由所有静态文件需要做更多的工作。我该如何设置静态文件的CDN URL?

我正在研究配置Static::Simple,但似乎只有本地文件位置的设置。

2 个答案:

答案 0 :(得分:1)

您认为Catalyst实际上可以并且应该为您做些什么?

我担心如果你想要在应用程序之外生成你自己的链接,那么你几乎就是你自己 - 没有什么催化剂可以真正做或提供帮助你在这里,是吗?

或者您只是希望uri_for粉碎从/static开始指向您的CDN的所有路径?您可以将uri_for包裹起来并使其成功吗?

我认为你的版本(有一个单独的方法)更干净整洁,但是如果你的所有静态内容都进入了CDN,那么只要给你uri_for你想要的行为是合理的。

答案 1 :(得分:0)

2013年晚些时候,有人为此目的撰写了Catalyst::Plugin::ExternalURI

从概要部分:

use Catalyst qw/ ... ExternalURI ... /;

__PACKAGE__->config(
    externaluri => [
        # Converts urls with the form of /static/css to start with another domain name 
        { '^/static' => 'http://static.mydomain.com' },
        ...
        { 'MATCH' => 'REWRITE' }
        or
        { match => '^/static', rewrite => 'http://static.mydomain.com' },
    ]
);