Обслуживание статических файлов из CDN с Catalyst - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь обслуживать все статические файлы (js, css, images) из CDN вместо папки / static. Я начал писать свою собственную подпрограмму, чтобы переписать 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;
}

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

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

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

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

Боюсь, что если вы захотите создать свои собственные ссылки, которые находятся за пределами приложения, тогда вы в значительной степени сами по себе - mdash; Catalyst не может ничего сделать или предоставить, чтобы помочь вам здесь, не так ли?

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

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

0 голосов
/ 17 февраля 2018

Позже в 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' },
    ]
);
...