2012-02-13 1 views
1

Я пытаюсь обслуживать все статические файлы (js, css, images) из CDN вместо папки/static. Я начал писать свой собственный суб переписать URL-изображения:Обслуживание статических файлов с CDN с помощью Catalyst

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; 
} 

Но потом я понял, что это собиралось потребуется гораздо больше усилий, чтобы получить все статические файлы переадресовывать автоматически. Как мне настроить настройку URL-адреса CDN для статических файлов?

Я искал конфигурацию Static::Simple, но он, похоже, имеет только локальные настройки локального расположения файлов.

ответ

1

Как вы думаете, что Catalyst действительно может и должен сделать для вас здесь?

Я боюсь, если вы хотите создать свои собственные ссылки, которые находятся за пределами приложения, то вы в значительной степени сами по себе — нет ничего, что Катализатор действительно может сделать или предоставить, чтобы помочь вам здесь, есть ли ?

Или вы хотите, чтобы uri_for разбить все пути, начиная с /static, чтобы указать ваш CDN? Как вы можете просто обернуть uri_for и заставить это сделать это?

Я думаю, что ваша версия (с отдельным методом) более чистая и аккуратная, но если все ваше статическое содержимое выходит на CDN, то просто давая uri_for, поведение, которое вы хотите, разумно.

+0

Я надеялся, что там был способ, в котором я мог бы определить CDN в конфигурационном файле, и он просто работает. Да, я закончил внедрение метода uri_for_static. Благодаря! –

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