Thanks for the response!

Try send_error() instead.  If it works, it’s more sensible anyway.

It doesn't appear to work. Same error as 'pass' and 'forward'. It seems maybe send_error() is not allowed within a before_hook.

You should be caching database connections. Re-opening it on each and every hit is a bit expensive, even for a localhost connection.

Hmmm does this code not do that? I'm using the Dancer Database plugin (and not the old plain DBI), just setting the database dynamically (based on $client) instead of from the typical ./config.yml. I assumed each database would be cached automatically by the plugin.

Why 404?

Because the routes are named
/:client
/:client/foo
/:client/bar
/:client/foo/bar/foobar
etc...

so, if a database for /:client doesn't exist, it means (within the context of my app) the URI doesn't exist.

-----Original Message----- From: Warren Young
Sent: Monday, November 09, 2015 9:57 PM
To: Perl Dancer users mailing list
Subject: Re: [dancer-users] Triggering 404 error from a hook

On Nov 9, 2015, at 6:35 PM, Hermann Calabria <[email protected]> wrote:

# Figure out client, if any
my $client = param('client') || '';
unless ($client =~ /^[a-z0-9]{2,20}$/) {
  $client = ''; }

# If $client, get client dbh
if ($client) {

Two lines replaces all that:

 my $client = param('client') || ‘';
 if ($client =~ /^[a-z0-9]{2,20}$/) {

    eval {
      var dbh => database({
        driver => "mysql",
        host => "localhost",
        dbi_params => ...
        database => "s_".$client,
        ...
        });
      }

You should be caching database connections. Re-opening it on each and every hit is a bit expensive, even for a localhost connection.

I’d like Dancer to gracefully fall through to a 404 error

Why 404? That means the URI names a nonexistent resource, which is more appropriate for something like SELECT … = 0 records. This feels more like a 500 error.

Unless, that is, “missing customer DB” is something you expect your users to run into.

I’ve tried “pass” and “forward”, but I receive a cryptic “Internal Server Error” which I assume is because these keywords are not valid within hooks, but I’m not sure.

Try send_error() instead.  If it works, it’s more sensible anyway.
_______________________________________________
dancer-users mailing list
[email protected]
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
_______________________________________________
dancer-users mailing list
[email protected]
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users

Reply via email to