On Wed, 13 Jul 2016 19:25:55 +0100 janet davis <[email protected]> wrote:
> Yes, it would be fantastic if this method worked and I have tried but > I get the following error when switching between app1 and app2. Yes > Perl 5.14 sadly, we are due to update to Debian 8 shortly which will > bring us up to 5.20.2. > > Error while loading /var/www/webapp/app2/bin/app.psgi: Can't locate > app2.pm in @INC (@INC > contains: /var/www/webapp/app1/bin/../lib /etc/perl > /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 > /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 > /usr/local/lib/site_perl . /etc/apache2) at > /var/www/webapp/app2/bin/app.psgi line 8.\nBEGIN failed--compilation > aborted at /var/www/webapp/app2/bin/app.psgi line 8. > > App2 will work after a refresh, but them going back to App1 I get: > > and > > Error while loading /var/www/webapp/app1/bin/app.psgi: Can't locate > app1.pm in @INC (@INC > contains: /var/www/webapp/app2/bin/../lib /etc/perl > /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 > /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 > /usr/local/lib/site_perl . /etc/apache2) at > /var/www/webapp/app1/bin/app.psgi line 8.\nBEGIN failed--compilation > aborted at /var/www/webapp/app1/bin/app.psgi line 8 Are you using FindBin in your .psgi scripts? Try adding the line, FindBin::again(); after the use FindBin line. I think that'll work at least as far back as 5.14. Otherwise, there's another alternative in the Known Issues section of the FindBin man page. > Here's my Apache config: > <Location /app1> > SetHandler perl-script > PerlResponseHandler > Plack::Handler::Apache2 > PerlSetVar psgi_app > /var/www/webapp/app1/bin/app.psgi > </Location> > > <Location > /app2> > SetHandler > perl-script > PerlResponseHandler > Plack::Handler::Apache2 > PerlSetVar psgi_app > /var/www/webapp/app2/bin/app.psgi > </Location> > > On Wed, Jul 13, 2016 at 5:14 PM, Chad Wallace > <[email protected]> wrote: > > > On Wed, 13 Jul 2016 14:28:23 +0100 > > janet davis <[email protected]> wrote: > > > > > Thanks for both of your input, it has really helped a lot. > > > > You're welcome! But I have another suggestion... > > > > After re-reading your original post, I looked up the > > Plack::Handler::Apache2 option, and it looks like it might be > > better. It's at least worth exploring. > > > > From the example in the deployment guide you mentioned, it looks > > like all you'd have to do to your existing virtual host is add a > > <Location> section for each of your apps, like this: > > > > <VirtualHost> > > ServerName www.myserver > > > > [...] > > > > <Location /app1> > > SetHandler perl-script > > PerlResponseHandler Plack::Handler::Apache2 > > PerlSetVar psgi_app /websites/app1/app.psgi > > </Location> > > <Location /app2> > > SetHandler perl-script > > PerlResponseHandler Plack::Handler::Apache2 > > PerlSetVar psgi_app /websites/app2/app.psgi > > </Location> > > <Location /app3> > > SetHandler perl-script > > PerlResponseHandler Plack::Handler::Apache2 > > PerlSetVar psgi_app /websites/app3/app.psgi > > </Location> > > > > [...] > > > > </VirtualHost> > > > > That way, your plack apps will start and stop with your apache > > server. > > > > I don't have any experience with this approach, so hopefully someone > > else can weigh in on the pros and cons. It seems much simpler to > > me. > > > > One drawback I can think of is that your apache processes would all > > load a copy of perl, Plack, Dancer and all the rest. It may be > > better for memory usage to use the proxy method, especially if you > > have dozens of apache workers, but only need a few Dancer workers. > > The impact of that would depend on the relative weight of your > > existing website vs. the new apps, and also whether you already use > > mod_perl and a lot of the same modules.... > > > > You should definitely try both methods and see which is best. And > > be sure to let us know what you find! > > > > > > > On Wed, Jul 13, 2016 at 12:25 AM, Chad Wallace > > > <[email protected]> wrote: > > > > > > > On Tue, 12 Jul 2016 22:07:56 +0100 > > > > janet davis <[email protected]> wrote: > > > > > > > > > The only problem is the uri_base doesn't point to the public > > > > > directory in my application root it points to / so no css/js > > > > > etc. > > > > > > > > > > I have: > > > > > ProxyPass /app1 http://localhost:5000 > > > > > ProxyPassReverse /app1 http://localhost:5000 > > > > > And I can reach app1 on myserver.com/app1 > > > > > > > > > > Is there anywhere in the config that I can specify the correct > > > > > uri_base per app? > > > > > > > > There's the behind_proxy config option (see Dancer2::Config). > > > > > > > > > I will try using Plack Builder with some example apps. Are > > > > > there any performance implications if I run a lot of Dancer > > > > > apps in this way (15+) alongside my cgi scripts? I don't > > > > > want to go down this route and then discover that I have > > > > > issues with server resources. > > > > > > > > I'm guessing you'll get better performance with them combined. > > > > They should at least use less memory that way, because the > > > > single process would load all modules only once, rather than > > > > loading one process per app, each with its own copy of perl, > > > > Plack, Dancer, Moo, etc. > > > > > > > > Adding the mounts with Plack::Builder probably doesn't add too > > > > much overhead. From what I've seen, Plack and Dancer are both > > > > designed to perform and scale well. > > > > > > > > You could test both methods and compare the results. > > > > > > > > > > > > > On Tue, Jul 12, 2016 at 9:21 PM, Chad Wallace > > > > > <[email protected]> wrote: > > > > > > > > > > > On Tue, 12 Jul 2016 19:55:31 +0100 > > > > > > janet davis <[email protected]> wrote: > > > > > > > > > > > > > Hi there, > > > > > > > > > > > > > > I have a web server running Apache with a single vhost > > > > > > > that serves a lot of Perl cgi scripts from cgi-bin. > > > > > > > > > > > > > > I've been trying out Dancer, which I really like, but I > > > > > > > can't figure out the best way to deploy apps in my Apache > > > > > > > environment. I want to keep my Apache cgi configuration to > > > > > > > serve legacy scripts but I want to start building new > > > > > > > projects based on psgi in something like Dancer. > > > > > > > > > > > > > > I want Apache to use > > > > > > > www.myserver/cgi-bin/appname/script.pl for old code > > > > > > > (which currently works) and www.myserver/app1 for newer > > > > > > > Dancer based apps. Please don't think I'm being lazy by > > > > > > > asking, I have read the documentation and looked at the > > > > > > > example for deploying multiple apps via fcgi but I am > > > > > > > still confused as I have limited experience with Apache - > > > > > > > I am working on that. What's the best way to set this up, > > > > > > > bearing in mind that I may want to run say 10-15 Dancer > > > > > > > apps from my server alongside my cgi-scripts? Do I have > > > > > > > to set up a vhost for each app? I have > > > > > > > Apache::Plack::Handler but I'm not sure whether I should > > > > > > > be using Plack::Builder to mount my apps (which is > > > > > > > mentioned in an older Dancer Cookbook, but not the > > > > > > > current deployment guide. Can someone help me get on the > > > > > > > right track please? > > > > > > > > > > > > I'm not sure it matches what you currently have in mind, but > > > > > > what I would do is set up www.myserver/app1 with mod_proxy > > > > > > to a standalone Plack/Dancer process for the app. You > > > > > > would need something like this in your VirtualHost for each > > > > > > app: > > > > > > > > > > > > ProxyPass /app1 http://localhost:5000/app1 > > > > > > > > > > > > You'd also have to manage starting, stopping and reloading > > > > > > each of your apps on its own, with a dedicated port, like > > > > > > 5000 in the line above. > > > > > > > > > > > > If you wanted to combine your apps into one, you can do that > > > > > > with Plack::Builder in a single app.psgi script. Then you > > > > > > get the benefit of only having one script to start and > > > > > > stop, and one port. I currently do that with one of my apps > > > > > > to separate the AJAX-specific stuff, based on code I found > > > > > > in Dancer2::Cookbook[1]: > > > > > > > > > > > > #!/usr/bin/env perl > > > > > > > > > > > > use strict; > > > > > > use warnings; > > > > > > > > > > > > use FindBin; > > > > > > use lib "$FindBin::Bin/../lib"; > > > > > > > > > > > > use Plack::Builder; > > > > > > use newtlc; > > > > > > use newtlc::API; > > > > > > > > > > > > builder { > > > > > > mount '/' => newtlc->to_app; > > > > > > mount '/api' => newtlc::API->to_app; > > > > > > }; > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > https://metacpan.org/pod/distribution/Dancer2/lib/Dancer2/Cookbook.pod#App-specific-feature > > > > > > > > > > > > -- > > > > > > > > C. Chad Wallace, B.Sc. > > > > The Lodging Company > > > > http://www.lodgingcompany.com/ > > > > OpenPGP Public Key ID: 0x262208A0 > > > > > > > > _______________________________________________ > > > > dancer-users mailing list > > > > [email protected] > > > > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users > > > > > > > > > > -- > > > > C. Chad Wallace, B.Sc. > > The Lodging Company > > http://www.lodgingcompany.com/ > > OpenPGP Public Key ID: 0x262208A0 > > > > _______________________________________________ > > dancer-users mailing list > > [email protected] > > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users > > -- C. Chad Wallace, B.Sc. The Lodging Company http://www.lodgingcompany.com/ OpenPGP Public Key ID: 0x262208A0 _______________________________________________ dancer-users mailing list [email protected] http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
