Hi,

On Tue, Sep 17, 2013 at 10:36 AM, Juan José 'Peco' San Martín <jsanmartin@gmail.com> wrote:
I have 2 different Dancer apps (app1 and app2). Each one working very well on different servers under Apache and Plack::Handler::Apache2.

Now, I would like put both applications in just one server, so I adjusted the Apache config just adding the two Location sections.

If I use the first app, everything works, but when I try the second one, it seems that Dancer2 (with Plack::Handler::Apache2) still looks for the paths of the first app (so it fails because it can not find my app2 modules).

Example (how to reproduce the behaviour)

0) Dancer 2.06

1) Adjust Apache config to add the Locations of the two apps

# Apache location
<Location /app1>
    SetHandler perl-script
    PerlHandler Plack::Handler::Apache2
    PerlSetVar psgi_app /path/app1/bin/app.pl
</Location>

<Location /app2>
   SetHandler perl-script
   PerlHandler Plack::Handler::Apache2
   PerlSetVar psgi_app /path/app2/bin/app.pl
</Location>

2) Try app1 => it works!

3) Try app2 => fails with the next message: Error while loading /app2/app.pl: Can't locate App2.pm in @INC (@INC contains /path/app1/lib/ /usr/local....)

Where App2 is the main module at (app2/lib/) called from app2/bin/app.pl after use Dancer2.

Try this: create a merged.psgi file with this content:

use Plack::Builder;
use App1;
use App2;

builder {
  mount '/app1' => App1->dance;
  mount '/app2' => App2->dance;
};


And then use it on Apache with:

<Location />
    SetHandler perl-script
    PerlHandler Plack::Handler::Apache2
    PerlSetVar psgi_app /path/to/merged.psgi
</Location>

I have not tested this, I don't have a mod_perl2 at hand anymore, but it should work.

Bye,
--
Pedro Melo
@pedromelo
http://www.simplicidade.org/
xmpp:melo@simplicidade.org
mailto:melo@simplicidade.org