now better support for legacy psgi (Catalyst::Engine::PSGI) running with plackup...
John Napiorkowski [Thu, 21 Jul 2011 19:49:22 +0000 (15:49 -0400)]
lib/Catalyst.pm
lib/Catalyst/Engine.pm
lib/Catalyst/EngineLoader.pm

index 0111228..083c0af 100644 (file)
@@ -2413,7 +2413,12 @@ Starts the engine.
 
 =cut
 
-sub run { my $c = shift; return $c->engine->run( $c, $c->_finalized_psgi_app, @_ ) }
+sub run {
+  my $app = shift;
+  $app->engine_loader->needs_psgi_engine_compat_hack ?
+    $app->engine->run($app, @_) :
+      $app->engine->run( $app, $app->_finalized_psgi_app, @_ );
+}
 
 =head2 $c->set_action( $action, $code, $namespace, $attrs )
 
@@ -2660,6 +2665,18 @@ sub _setup_psgi_app {
         # .psgi files generated by the old Engine::PSGI do. Those return an app
         # coderef calling into MyApp->run, which doesn't work anymore, so we're
         # just ignoring it and use the wrapped legacy psgi app
+
+        $app->engine(undef);
+        $app->setup_engine;
+
+        # ^^ We need to do this because even though we are discarded $psgi_app, the
+        # fact that it was loaded above means that Catalyst Engine now has the
+        # wrong value (PSGI), which persists due to the singleton nature of all
+        # this stuff.  This solution is probably a lame hack but did work for all
+        # the cases we know about.  Hopefully we can pull out this crap soon
+        # Please note that if the fact that the psgi file was loaded started to set
+        # values in areas outside Engine this hack will probably fail.
+
         warn <<"EOW";
 Found a legacy Catalyst::Engine::PSGI .psgi file at ${psgi_file}.
 
index edef417..7cba9dd 100644 (file)
@@ -20,6 +20,17 @@ use namespace::clean -except => 'meta';
 
 has env => (is => 'ro', writer => '_set_env', clearer => '_clear_env');
 
+my $WARN_ABOUT_ENV = 0;
+around env => sub {
+  my ($orig, $self, @args) = @_;
+  if(@args) {
+    warn "env as a writer is deprecated, you probably need to upgrade Catalyst::Engine::PSGI"
+      unless $WARN_ABOUT_ENV++;
+    return $self->_set_env(@args);
+  }
+  return $self->$orig;
+};
+
 # input position and length
 has read_length => (is => 'rw');
 has read_position => (is => 'rw');
index f2b999a..36cf016 100644 (file)
@@ -39,7 +39,20 @@ sub _guess_catalyst_engine_class {
     if (!defined $old_engine) {
         return 'Catalyst::Engine';
     }
-    elsif ($old_engine =~ /^(PSGI|CGI|FastCGI|HTTP|Apache.*)$/) {
+    elsif ($old_engine eq 'PSGI') {
+        ## If we are running under plackup let the Catalyst::Engine::PSGI
+        ## continue to run, but warn.
+        warn <<"EOW";
+You are running Catalyst::Engine::PSGI, which is considered a legacy engine for
+this version of Catalyst.  We will continue running and use your existing psgi
+file, but it is recommended to perform the trivial upgrade process, which will
+leave you with less code and a forward path.
+
+Please review Catalyst::Upgrading
+EOW
+        return 'Catalyst::Engine::' . $old_engine;
+    }
+    elsif ($old_engine =~ /^(CGI|FastCGI|HTTP|Apache.*)$/) {
         return 'Catalyst::Engine';
     }
     else {