[dancer-users] Dancer NGINX configutation

Dave Cross dave at dave.org.uk
Tue Mar 8 15:45:01 GMT 2016


[ re-ordered (again) in a vain attempt to preserve readability ]

Quoting Richard Reina <gatorreina at gmail.com>:

> 2016-03-08 9:02 GMT-06:00 Dave Cross <dave at dave.org.uk>:
>
>>
>> [ re-ordered to preserve readability ]
>>
>>
>> Quoting Richard Reina <gatorreina at gmail.com>:
>>
>> 2016-03-08 8:41 GMT-06:00 Dave Cross <dave at dave.org.uk>:
>>>
>>> Quoting Richard Reina <gatorreina at gmail.com>:
>>>>
>>>> I have the following nginx configuration that I believe -- or at least
>>>> hope
>>>>
>>>>> -- serves up my static files, like images ad videos, directly without
>>>>> invoking my dancer app. Can anyone tells me if this is the case or not,
>>>>> or
>>>>> how I can test to see if they are indeed being served directly by NGINX?
>>>>>
>>>>
>>>> Before you go too far down this route, have you considered using
>>>> Plack::Middleware::Static instead?
>>>>
>>>>   https://metacpan.org/pod/Plack::Middleware::Static
>>>>
>>>
>>> Hi Dave,
>>>
>>> Thanks for the reply. I think I am already using it via starman.
>>>
>>> use Daemon::Control;
>>>
>>> use Cwd qw(abs_path);
>>>
>>> Daemon::Control->new(
>>>     {
>>>     name      => "Starman",
>>>     lsb_start => '$syslog $remote_fs',
>>>     lsb_stop  => '$syslog',
>>>     lsb_sdesc => 'Starman Short',
>>>     lsb_desc  => 'Starman controls the web sites.',
>>>     path      => abs_path($0),
>>>
>>>     program      => '/usr/local/bin/starman',
>>>     program_args => [ '--workers', '3',
>>> '/home/starman/mydomain/bin/app.psgi' ],
>>>
>>>     user  => 'starman',
>>>     group => 'starman',
>>>
>>>     pid_file    => '/tmp/starman.pid',
>>>     stderr_file => '/tmp/starman.err',
>>>     stdout_file => '/tmp/starman.out',
>>>
>>>     fork => 2,
>>>
>>>     }
>>>     )->run;
>>>
>>
>> I can't see an evidence of you using Plack::Middleware::Static (or,
>> indeed, any Plack middleware).
>>
>> It would't be added to your Starman runner, it would be in your app.psgi
>> (as described in the Pod that I linked to).
>
> Hi Dave,
>
> You are correct. I am obioulsy mistaken. In my development (non production)
> app which I run on a local machine (not digital ocean) I use plack via
> plackup -p 5000 bin/app.psgi. However, going through my old notes I now
> rememeber that I was not able to incorporate plack with my starman
> configuration above. I tried and for reasons that I cannot remember was
> unsuccessful and opted for:
>
>     program      => '/usr/local/bin/starman',
>     program_args => [ '--workers', '3',
> '/home/starman/Almslete/bin/app.psgi' ],
>
> Specifically, I believe that I originally tried something like:
>
>    program      => 'plackup -E deployment -s Starman',
>    plackup -E deployment -s Starman --workers=10 -p 5001 -a bin/app.psgi
>
> Any advice on how I can move forward on incorporating plack so that I can
> then incorporate Plack::Middleware::Static would of course be greatly
> appreciated.

I think we're talking at cross-purposes here.

You don't need to be running plackup in order to use Plack middleware.  
You just need to be running a PSGI app - which you are, it's in your  
app.psgi.

Assuming that you're using the app,psgi that dancer2 originally  
generated for you, then it will look something like this:

     #!/usr/bin/env perl

     use strict;
     use warnings;
     use FindBin;
     use lib "$FindBin::Bin/../lib";

     use MyWebApp;
     MyWebApp->to_app;

(Obviously substituting the name of your app for "MyWebApp".)

To add Plack::Middleware::Static, you would change it to look  
something like this:

     #!/usr/bin/env perl

     use strict;
     use warnings;
     use FindBin;
     use lib "$FindBin::Bin/../lib";

     use Plack::Builder;

     use MyWebApp;

     builder {
       enable 'Plack::Middleware::Static',
         path => qr{^/(javascripts|css)/} , root => './public/';
       MyWebApp->to_app;
     };

To (attempt to) be completely clear - you can use Plack middleware  
with any PSGI app. You don't need to be running it under plackup.  
Running it under Starman (or any other PSGI server) will work just as  
well.

Hope that's clearer.

Dave...




More information about the dancer-users mailing list