X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FPlugin%2FStatic%2FSimple.pm;h=b83215b4db8ac8466cd64038a5c96e8d99198875;hb=8223995544e9031e40cac6e1d06ffc1ac8d8a275;hp=1dc8eca42fa67fd7e4e73296af67191b82f04906;hpb=b1d96e3e36e4f09e374cee63f84a62630e173828;p=catagits%2FCatalyst-Plugin-Static-Simple.git diff --git a/lib/Catalyst/Plugin/Static/Simple.pm b/lib/Catalyst/Plugin/Static/Simple.pm index 1dc8eca..b83215b 100644 --- a/lib/Catalyst/Plugin/Static/Simple.pm +++ b/lib/Catalyst/Plugin/Static/Simple.pm @@ -7,12 +7,12 @@ use File::stat; use MIME::Types; use NEXT; -our $VERSION = '0.06'; +our $VERSION = '0.09'; -__PACKAGE__->mk_classdata( qw/_mime_types/ ); +__PACKAGE__->mk_classdata( qw/_static_mime_types/ ); __PACKAGE__->mk_accessors( qw/_static_file - _apache_mode - _debug_message/ ); + _static_apache_mode + _static_debug_message/ ); # prepare_action is used to first check if the request path is a static file. # If so, we skip all other prepare_action steps to improve performance. @@ -46,20 +46,23 @@ sub prepare_action { return if ( $c->_locate_static_file ); } - return $c->NEXT::prepare_action(@_); + return $c->NEXT::ACTUAL::prepare_action(@_); } # dispatch takes the file found during prepare_action and serves it sub dispatch { my $c = shift; - return undef if ( $c->res->status == 404 ); + return if ( $c->res->status != 200 ); if ( $c->_static_file ) { + if ( $c->config->{static}->{no_logs} && $c->log->can('abort') ) { + $c->log->abort( 1 ); + } return $c->_serve_static; } else { - return $c->NEXT::dispatch(@_); + return $c->NEXT::ACTUAL::dispatch(@_); } } @@ -69,14 +72,13 @@ sub finalize { # display all log messages if ( $c->config->{static}->{debug} && scalar @{$c->_debug_msg} ) { - $c->log->debug( "Static::Simple: Serving " . - join( " ", @{$c->_debug_msg} ) - ); + $c->log->debug( "Static::Simple: Serving " . + join( " ", @{$c->_debug_msg} ) ); } # return DECLINED when under mod_perl - if ( $c->config->{static}->{use_apache} && $c->_apache_mode ) { - my $engine = $c->_apache_mode; + if ( $c->config->{static}->{use_apache} && $c->_static_apache_mode ) { + my $engine = $c->_static_apache_mode; no strict 'subs'; if ( $engine == 13 ) { return Apache::Constants::DECLINED; @@ -94,7 +96,7 @@ sub finalize { return $c->finalize_headers; } - return $c->NEXT::finalize(@_); + return $c->NEXT::ACTUAL::finalize(@_); } sub setup { @@ -107,12 +109,16 @@ sub setup { $c->config->{static}->{mime_types} ||= {}; $c->config->{static}->{use_apache} ||= 0; $c->config->{static}->{debug} ||= $c->debug; + if ( ! defined $c->config->{static}->{no_logs} ) { + $c->config->{static}->{no_logs} = 1; + } # load up a MIME::Types object, only loading types with # at least 1 file extension - $c->_mime_types( MIME::Types->new( only_complete => 1 ) ); + $c->_static_mime_types( MIME::Types->new( only_complete => 1 ) ); + # preload the type index hash so it's not built on the first request - $c->_mime_types->create_type_index; + $c->_static_mime_types->create_type_index; } # Search through all included directories for the static file @@ -147,7 +153,7 @@ sub _locate_static_file { } } - return undef; + return; } sub _serve_static { @@ -184,8 +190,8 @@ sub _serve_static { else { $c->_debug_msg( "DECLINED to Apache" ) if ( $c->config->{static}->{debug} ); - $c->_apache_mode( $engine ); - return undef; + $c->_static_apache_mode( $engine ); + return; } } } @@ -215,15 +221,14 @@ sub _serve_static { # looks up the correct MIME type for the current file extension sub _ext_to_type { my $c = shift; - my $path = $c->req->path; - my $type; if ( $path =~ /.*\.(\S{1,})$/xms ) { my $ext = $1; my $user_types = $c->config->{static}->{mime_types}; - if ( $type = $user_types->{$ext} - || $c->_mime_types->mimeTypeOf( $ext ) ) { + my $type = $user_types->{$ext} + || $c->_static_mime_types->mimeTypeOf( $ext ); + if ( $type ) { $c->_debug_msg( "as $type" ) if ( $c->config->{static}->{debug} ); return $type; @@ -244,15 +249,15 @@ sub _ext_to_type { sub _debug_msg { my ( $c, $msg ) = @_; - if ( !defined $c->_debug_message ) { - $c->_debug_message( [] ); + if ( !defined $c->_static_debug_message ) { + $c->_static_debug_message( [] ); } if ( $msg ) { - push @{ $c->_debug_message }, $msg; + push @{ $c->_static_debug_message }, $msg; } - return $c->_debug_message; + return $c->_static_debug_message; } 1; @@ -291,9 +296,14 @@ Configuration is completely optional and is specified within MyApp->config->{static}. If you use any of these options, the module will probably feel less "simple" to you! -=over 4 +=head2 Aborting request logging + +Since Catalyst 5.50, there has been added support for dropping logging for a +request. This is enabled by default for static files, as static requests tend +to clutter the log output. However, if you want logging of static requests, +you can enable it by setting MyApp->config->{static}->{no_logs} to 0. -=item Forcing directories into static mode +=head2 Forcing directories into static mode Define a list of top-level directories beneath your 'root' directory that should always be served in static mode. Regular expressions may be @@ -304,7 +314,7 @@ specified using qr//. qr/^(images|css)/, ]; -=item Including additional directories (experimental!) +=head2 Including additional directories You may specify a list of directories in which to search for your static files. The directories will be searched in order and will return the first @@ -343,7 +353,7 @@ For example: } } -=item Custom MIME types +=head2 Custom MIME types To override or add to the default MIME types set by the MIME::Types module, you may enter your own extension to MIME type mapping. @@ -352,8 +362,8 @@ you may enter your own extension to MIME type mapping. jpg => 'image/jpg', png => 'image/png', }; - -=item Apache integration and performance + +=head2 Apache integration and performance Optionally, when running under mod_perl, Static::Simple can return DECLINED on static files to allow Apache to serve the file. A check is first done to @@ -377,8 +387,8 @@ from Apache by defining a Location block similar to the following: SetHandler default-handler - -=item Bypassing other plugins + +=head2 Bypassing other plugins This plugin checks for a static file in the prepare_action stage. If the request is for a static file, it will bypass all remaining prepare_action @@ -390,15 +400,13 @@ to run even on static files, list them before Static::Simple. Currently, work done by plugins in any other prepare method will execute normally. -=item Debugging information +=head2 Debugging information Enable additional debugging information printed in the Catalyst log. This is automatically enabled when running Catalyst in -Debug mode. MyApp->config->{static}->{debug} = 1; -=back - =head1 SEE ALSO L, L, @@ -408,6 +416,10 @@ L Andy Grundman, +=head1 CONTRIBUTORS + +Marcus Ramberg, + =head1 THANKS The authors of Catalyst::Plugin::Static: