X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FPlugin%2FStatic%2FSimple.pm;h=b1186ea1e26f695506d03980bbbdc5d917c1f0ed;hb=071c00424cf9346c0e7c71dc526003ac0f56c672;hp=aa0c732c3eb09483a109f7bb6abd48ddbdd38702;hpb=ab02ca0d1f663f389eef9d4b000c05392304c06a;p=catagits%2FCatalyst-Plugin-Static-Simple.git diff --git a/lib/Catalyst/Plugin/Static/Simple.pm b/lib/Catalyst/Plugin/Static/Simple.pm index aa0c732..b1186ea 100644 --- a/lib/Catalyst/Plugin/Static/Simple.pm +++ b/lib/Catalyst/Plugin/Static/Simple.pm @@ -8,7 +8,7 @@ use File::Spec (); use IO::File (); use MIME::Types (); -our $VERSION = '0.17'; +our $VERSION = '0.20'; __PACKAGE__->mk_accessors( qw/_static_file _static_debug_message/ ); @@ -22,7 +22,11 @@ sub prepare_action { # is the URI in a static-defined path? foreach my $dir ( @{ $config->{dirs} } ) { my $dir_re = quotemeta $dir; - my $re = ( $dir =~ m{^qr/}xms ) ? eval $dir : qr/^${dir_re}/; + + # strip trailing slashes, they'll be added in our regex + $dir_re =~ s{/$}{}; + + my $re = ( $dir =~ m{^qr/}xms ) ? eval $dir : qr{^${dir_re}/}; if ($@) { $c->error( "Error compiling static dir regex '$dir': $@" ); } @@ -34,6 +38,7 @@ sub prepare_action { $c->_debug_msg( "404: file not found: $path" ) if $config->{debug}; $c->res->status( 404 ); + $c->res->content_type( 'text/html' ); } } } @@ -92,6 +97,7 @@ sub setup { $config->{ignore_dirs} ||= []; $config->{debug} ||= $c->debug; $config->{no_logs} = 1 unless defined $config->{no_logs}; + $config->{no_logs} = 0 if $config->{logging}; # load up a MIME::Types object, only loading types with # at least 1 file extension @@ -208,6 +214,7 @@ sub serve_static_file { $c->_debug_msg( "404: file not found: $full_path" ) if $config->{debug}; $c->res->status( 404 ); + $c->res->content_type( 'text/html' ); return; } @@ -266,9 +273,12 @@ Catalyst::Plugin::Static::Simple - Make serving static pages painless. use Catalyst; MyApp->setup( qw/Static::Simple/ ); - # that's it; static content is automatically served by - # Catalyst, though you can configure things or bypass - # Catalyst entirely in a production environment + # that's it; static content is automatically served by Catalyst + # from the application's root directory, though you can configure + # things or bypass Catalyst entirely in a production environment + # + # one caveat: the files must be served from an absolute path + # (i.e. /images/foo.png) =head1 DESCRIPTION @@ -322,7 +332,7 @@ Since Catalyst 5.50, logging of static requests is turned off by default; static requests tend to clutter the log output and rarely reveal anything useful. However, if you want to enable logging of static requests, you can do so by setting -Cconfig-E{static}-E{no_logs}> to 0. +Cconfig-E{static}-E{logging}> to 1. =head2 Forcing directories into static mode @@ -430,13 +440,14 @@ is automatically enabled when running Catalyst in -Debug mode. =head1 USING WITH APACHE -While Static::Simple will work just fine serving files through Catalyst in -mod_perl, for increased performance, you may wish to have Apache handle the -serving of your static files. To do this, simply use a dedicated directory -for your static files and configure an Apache Location block for that -directory. This approach is recommended for production installations. +While Static::Simple will work just fine serving files through Catalyst +in mod_perl, for increased performance you may wish to have Apache +handle the serving of your static files directly. To do this, simply use +a dedicated directory for your static files and configure an Apache +Location block for that directory This approach is recommended for +production installations. - + SetHandler default-handler @@ -445,6 +456,29 @@ through Catalyst. You can leave Static::Simple as part of your application, and it will continue to function on a development server, or using Catalyst's built-in server. +In practice, your Catalyst application is probably (i.e. should be) +structured in the recommended way (i.e., that generated by bootstrapping +the application with the C script, with a main directory +under which is a C directory for module files and a C +directory for templates and static files). Thus, unless you break up +this structure when deploying your app by moving the static files to a +different location in your filesystem, you will need to use an Alias +directive in Apache to point to the right place. You will then need to +add a Directory block to give permission for Apache to serve these +files. The final configuration will look something like this: + + Alias /myapp/static /filesystem/path/to/MyApp/root/static + + allow from all + + + SetHandler default-handler + + +If you are running in a VirtualHost, you can just set the DocumentRoot +location to the location of your root directory; see +L. + =head1 PUBLIC METHODS =head2 serve_static_file $file_path