[Dancer-users] Dancer + Plack/Starman - location of .psgi matters?

Richard Huxton dev at archonet.com
Mon May 9 20:45:18 CEST 2011


On 09/05/11 12:24, Takeshi OKURA wrote:
> 2011/5/7 Richard Huxton<dev at archonet.com>:
>> This works:
>>   starman -E development -a bin/app.development.psgi ...
>> This doesn't (complains about config not being loaded):
>>   starman -E development -a res/app.development.psgi ...
>
> Dancer.pm have a below code in sub _init_script_dir.
[snip]
> So, bin and public dir are special case which appdir is set to one
> level upper path.

Aha - I thought something like that must be happening. Thanks very much 
for this pointer.

> You may work around the problem to set DANCER_APPDIR environment
> variable. for example
> DANCER_APPDIR=`pwd` starman -E development -a res/app.development.psgi ...

Hmm - looks like a documentation patch might be useful, since I don't 
remember seeing DANCER_APPDIR mentioned anywhere.

Hmm - it's not possible to set this simply in the .psgi because it's 
needed at "use" time. So - this doesn't work:
     $ENV{DANCER_APPDIR} = "/srv/Projects/oldford_db/src/tmp/test1";
     use Dancer;
     ...rest of script...
But this does:
     BEGIN {
         $ENV{DANCER_APPDIR} = "/srv/Projects/oldford_db/src/tmp/test1";
     }
     use Dancer;
     ...rest of script...

Would there be any interest in some elements of the following?

1. Have an explicit appdir (syntax just a suggestion)
    use Dancer appdir=>'/path/to/myapp'
2. If that isn't provided, check ENV as at present
3. If that isn't provided, try based on script dir
    Be a bit stricter than at present, perhaps check for:
    bin/ && public/ && config.yml
4. If that fails, die and explain why.

I think steps #3,4 are valuable in themselves. If my app had just died 
and told me to check the docs re: appdir then that would have saved me 
any pain.

-- 
   Richard Huxton
   Archonet Ltd


More information about the Dancer-users mailing list