[Dancer-users] Dancer.pm sets confdir too early

Stéphane stephane at shimaore.net
Mon Apr 26 17:08:42 CEST 2010


>>     use Dancer ':syntax';
>>     set confdir =>  MyApp::confdir; # e.g. /etc/myapp/config.yml
>>     use Dancer;
[...]
> No, you can't do that. It has never been possible to set the confdir via
> the "set" keyword as Dancer needs to parse configuration files at import
> time.

Agreed. I had seen the DANCER_CONFDIR environment variable, but could 
not get it to work from within a Perl script or module (using 
$ENV{DANCER_CONFDIR} = ..) without calling Dancer->import() manually, so 
that defeated the purpose.

I worked around it by doing:

   package MyApp::Portal;
   use Dancer ':syntax';
   set confdir     => MyApp::ConfDir;
   set appdir      => ...

and

   #!/usr/bin/env perl
   use MyApp::Portal;

   use Dancer ':syntax';
   use Dancer::Config;
   use Dancer::GetOpt;

   Dancer::GetOpt->process_args();
   Dancer::Config->load;

   dance;

which mimics import() without forcing the settings.


YMMV. Maybe import() could have a different parameter (besides :syntax), 
for example :nodefaults, which would do:

   unless ($symbol && $symbol eq ':nodefaults') {
     setting appdir => dirname(File::Spec->rel2abs($script));
     # etc.
     setting confdir => $ENV{DANCER_CONFDIR} || setting('appdir');
   }

Stéphane


More information about the Dancer-users mailing list