<html><body><div style="color:#000; background-color:#fff; font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1433795419408_47535">Perl Folks,</div><div> </div><div><br>>>> hoping that someone had already packaged up an RPM/PKG like Apache where I could just drop my PSGI script in the /etc/starman/pgsi/ folder and be off and running.  </div><div id="yui_3_16_0_1_1433795419408_47536"> </div><div> </div><div id="yui_3_16_0_1_1433795419408_47557" dir="ltr">Here's a cool URL mapper for Plack apps.  It works great for Plack apps but it fails to pull in more than the first Mojo app.  I have no idea why but load_psgi (`do "$filename"`) must work differently after the first Mojo app is loaded.</div><div id="yui_3_16_0_1_1433795419408_47537"> </div><div dir="ltr">Error: "Can't use string ("Mojolicious::Commands") as a subroutine ref while "strict refs" in use at /usr/share/perl5/vendor_perl/Plack/Middleware/Auth/Basic.pm line 30."<br></div><div> </div><div id="yui_3_16_0_1_1433795419408_47625">$ cat plack-builder-mount-deamon-folder.pl<br>#!/usr/bin/perl<br>use strict;<br>use warnings;<br>use Plack::App::URLMap qw{};<br>use Plack::Util qw{};</div><div id="yui_3_16_0_1_1433795419408_47626" dir="ltr">my %filenames = (<br>                 '/p0' => 'plack.psgi', #works<br>                 '/p1' => 'plack.psgi', #works<br>                 '/p2' => 'plack.psgi', #works<br>                 '/p3' => 'plack.psgi', #works<br>                 '/p4' => 'plack.psgi', #works<br>                 '/p5' => 'plack.psgi', #works<br>                 '/m1' => 'mojo-lite-1.psgi', #works<br>                 '/m2' => 'mojo-lite-2.psgi', #fails<br>                 '/m3' => 'mojo-lite-3.psgi', #fails<br>                 '/m4' => 'mojo-lite-4.psgi', #fails<br>                 '/m5' => 'mojo-lite-5.psgi', #fails<br>                );</div><div id="yui_3_16_0_1_1433795419408_47627">my $mapper    = Plack::App::URLMap->new;</div><div id="yui_3_16_0_1_1433795419408_47628">foreach my $mount (sort keys %filenames) {<br>  my $filename = $filenames{$mount};<br>  my $app      = Plack::Util::load_psgi($filename) or die($@);<br>  die($@) unless ref($app) eq "CODE";<br>  $mapper->map($mount => $app);<br>  print "Mapped: $mount to $filename ($app)\n";<br>}</div><div id="yui_3_16_0_1_1433795419408_47629" dir="ltr">my $system = $mapper->to_app;<br> </div><div id="yui_3_16_0_1_1433795419408_47539">---</div><div id="yui_3_16_0_1_1433795419408_47630"> </div><div dir="ltr">$ cat plack.psgi</div><div id="yui_3_16_0_1_1433795419408_47631">#!/usr/bin/perl<br>use Plack::Builder;</div><div id="yui_3_16_0_1_1433795419408_47632">my $app = sub {<br>  my $env = shift;<br>  return [<br>           200,<br>           [ "Content-Type" => "text/plain", "Content-Length" => 11 ],<br>           [ "Hello World" ],<br>         ];<br>};</div><div id="yui_3_16_0_1_1433795419408_47597">builder {<br>  enable "Auth::Basic", authenticator => \&authen_cb;<br>  $app;<br>};</div><div id="yui_3_16_0_1_1433795419408_47598" dir="ltr">sub authen_cb {<br>  my($username, $password, $env) = @_;<br>  return $username eq 'user' && $password eq 'pass';<br>}<br></div><div dir="ltr">---</div><div dir="ltr"> </div><div dir="ltr">$ cat mojo-lite.psgi<br>#perl<br>use strict;<br>use warnings;<br>use Plack::Builder qw{builder enable mount};<br>use Mojolicious::Lite qw{app};<br>use DateTime;</div><div dir="ltr">get '/' => sub {<br>  my $c = shift;<br>  $c->render(<br>             json => {<br>                      int    => 1,<br>                      float  => 2.23423,<br>                      exp    => 34.45e27,<br>                      string => "hello world!",<br>                      dt     => DateTime->now,<br>                     }<br>            );<br>};</div><div dir="ltr"> </div><div dir="ltr">get '/env' => sub {<br>  my $c = shift;<br>  $c->render(<br>             text => join("", map {sprintf "%s: %s\n", $_, $ENV{$_}} sort keys %ENV),<br>            );<br>};</div><div dir="ltr"> </div><div dir="ltr">sub authen_cb {<br>  my($username, $password, $env) = @_;<br>  return $username eq 'user' && $password eq 'pass';<br>}</div><div dir="ltr"> </div><div dir="ltr">builder {<br>  enable "Auth::Basic", authenticator => \&authen_cb; </div><div id="yui_3_16_0_1_1433795419408_47610" dir="ltr">  app->start; #app from Mojolicious::Lite<br>};<br></div><div id="yui_3_16_0_1_1433795419408_47540">--- </div><div> </div><div id="yui_3_16_0_1_1433795419408_47541">Thanks,<br>Mike<br> <br>mrdvt92<br></div></div></body></html>