2012-02-13 61 views
1

我試圖從CDN而不是/靜態文件夾提供所有靜態文件(js,css,圖像)。我開始寫我自己的子改寫圖片網址:使用Catalyst從CDN服務靜態文件

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網址?

我正在尋找配置Static::Simple,但它似乎只有本地文件的位置設置。

回答

1

您認爲Catalyst在這裏可以爲您做什麼?

恐怕如果你想在應用程序外部生成自己的鏈接,那麼你幾乎可以自行創建自己的鏈接— Catalyst沒有任何東西可以幫你實現或提供幫助, ?

或者你只是想uri_for粉碎所有從/static開始的路徑指向你的CDN?正如你可以包裝uri_for並讓它做到這一點?

我認爲你的版本(有一個單獨的方法)更乾淨整潔,但是如果你所有的靜態內容都進入CDN,那麼只需要給你uri_for你想要的行爲是合理的。

+0

我希望有在,我可以在配置文件中定義的CDN的方式,它只是工作。是的,我結束了實施uri_for_static方法。謝謝! – 2012-02-14 11:05:43

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' }, 
    ] 
);