[dancer-users] Geting RuntimeError when calling pass

Jonathan Harden jfharden at gmail.com
Sun Sep 29 12:51:36 BST 2013


Hello fellow Dancer users,

I've been programming perl quite a few years now but am starting a new job
soon, they use Dancer so I thought I would have a bash at it before I start
there. I've been having a play at making something and I'm loving Dancer
but I seem to have hit on a problem, I'm not sure if it's a bug in Dancer
(it almost never is I know!) or if I am misunderstanding how I should be
using pass but here it is anyway:

I'm using Module::Load to load a module (containing routes) at runtime and
then calling pass. If there are no matching routes this causes a
RuntimeError.

Example:

$ cat bin/app.pl
#!/usr/bin/env perl
use Dancer;
use Demo;
dance;
__END__


$ cat lib/Demo.pm
package Demo;

use Dancer qw( :syntax !load );
use Module::Load;

any '/Monitoring/*?' => sub {
    my $module = "Monitoring";

    load $module;

    pass();
};

true;
__END__


$ cat lib/Monitoring.pm
package Monitoring;

use Dancer ':syntax';

prefix '/Monitoring';

get '/' => sub {
    return 'Monitoring Service';
};

get '/ping' => sub {
    return time;
};

true;
__END__


Calling domain.com/Monitoring/ping results in a timestamp as you would
expect
Calling domain.com/Monitoring/ returns the string "Monitoring Service".
Calling domain.com/Monitoring/foo results in a Runtime Error where I would
have expected to receive a 404 error

Runtime Error

runtime error

Can't call method "run" on an undefined value at
/usr/share/perl5/Dancer/Route.pm line 212.
/usr/share/perl5/Dancer/Route.pm around line 212
209         $response->pass(0);
210         if ($self->next) {
211             my $next_route = $self->find_next_matching_route($request);
212             return $next_route->run($request);
213         }
214         else {
215             Dancer::Logger::core('Last matching route passed!');
Stack
main in -e l. 0
main in -e l. 0
Plack::Handler::Apache2 in /usr/share/perl5/Plack/Handler/Apache2.pm l. 91
Plack::Handler::Apache2 in /usr/share/perl5/Plack/Handler/Apache2.pm l. 66
Dancer::Handler in /usr/share/perl5/Dancer/Handler.pm l. 123
Dancer::Handler in /usr/share/perl5/Dancer/Handler.pm l. 76
Dancer::Handler in /usr/share/perl5/Dancer/Handler.pm l. 113
Try::Tiny in /usr/share/perl5/Try/Tiny.pm l. 100
Dancer::Exception in /usr/share/perl5/Dancer/Exception.pm l. 47
Dancer::Exception in /usr/share/perl5/Dancer/Exception.pm l. 35
Dancer::Handler in /usr/share/perl5/Dancer/Handler.pm l. 107
Dancer::Object in /usr/share/perl5/Dancer/Object.pm l. 16
Dancer::Error in /usr/share/perl5/Dancer/Error.pm l. 37
Dancer::Error in /usr/share/perl5/Dancer/Error.pm l. 276


I've not posted all of the RuntimeError since it contains sensitive
information about my config file and server. If the rest is needed I can
spend some time to run up a clean version without anything important in.

I'm using the version of Dancer which comes with Debian 7.

$ apt-cache show libdancer-perl
Package: libdancer-perl
Version: 1.3095+dfsg-1

I'm using apache2 with Plack::Handler::Apache2 to run the Dancer
application.

My real application is more complex than this but I knocked this one up so
it would demo the problem with as little code as possible.

Does anyone know why this RuntimeError occurs, and perhaps how I can avoid
it in the situation where I need to load a module dynamically which
contains routes. Alternatively should I report this on the Dancer github
and then try and fix it?

Thanks,

Jonathan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20130929/4ee7671c/attachment.html>


More information about the dancer-users mailing list