Bug 7844 - plack intranet tooling for developers
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 29 Mar 2012 10:27:05 +0000 (12:27 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 30 May 2012 20:27:04 +0000 (22:27 +0200)
koha.psgi example and script to run any Koha site intranet or opac under plack

It also defines new enviroment variables:

PLACK_DEBUG=1  - turn Plack debug panels on
PLACK_MINIFY=1 - minify JavaScript and CSS which saves us ~10k on each page load

Test scenario:
1. install plack and dependencies, using ./cpanm-install.pl

2. start ./intranet-plack.sh sitename

3. open intranet page http://localhost:5001/cgi-bin/koha/mainpage.pl
   and verify that it works

4. start ./opac-plack.sh sitename

5. open OPAC http://localhost:5000/cgi-bin/koha/opac-main.pl
   and very that it works

misc/plack/cpanm-install.sh [new file with mode: 0755]
misc/plack/intranet-plack.sh [new file with mode: 0755]
misc/plack/koha.psgi [new file with mode: 0644]
misc/plack/opac-plack.sh [new file with mode: 0755]

diff --git a/misc/plack/cpanm-install.sh b/misc/plack/cpanm-install.sh
new file mode 100755 (executable)
index 0000000..589cb73
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh -xe
+
+sudo cpan App::cpanminus
+cpanm --sudo Task::Plack \
+       Plack::Middleware::Static::Minifier \
+       Plack::Middleware::Debug::Profiler::NYTProf \
+       Plack::Middleware::Debug::DBIProfile
+
diff --git a/misc/plack/intranet-plack.sh b/misc/plack/intranet-plack.sh
new file mode 100755 (executable)
index 0000000..d7cad52
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -xe
+
+site=ffzg
+test ! -z "$1" && site=$1
+dir=`dirname $0`
+
+export KOHA_CONF=/etc/koha/sites/$site/koha-conf.xml 
+export INTRANETDIR="$( xmlstarlet sel -t -v 'yazgfs/config/intranetdir' $KOHA_CONF )"
+
+if [ ! -e "$INTRANETDIR/C4" ] ; then
+       echo "intranetdir in $KOHA_CONF doesn't point to Koha git checkout"
+       exit 1
+fi
+
+# we are not wathcing all CGI scripts since that tends to use a lot of CPU time for plackup
+opt="--reload -R $INTRANETDIR/C4"
+sudo -E -u $site-koha plackup -I $INTRANETDIR $opt --port 5001 $dir/koha.psgi
diff --git a/misc/plack/koha.psgi b/misc/plack/koha.psgi
new file mode 100644 (file)
index 0000000..2989eab
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+use Plack::Builder;
+use Plack::App::CGIBin;
+use Plack::Middleware::Debug;
+use Plack::App::Directory;
+
+use C4::Context;
+use C4::Languages;
+use C4::Members;
+use C4::Dates;
+use C4::Boolean;
+use C4::Letters;
+use C4::Koha;
+use C4::XSLT;
+use C4::Branch;
+use C4::Category;
+
+my $app=Plack::App::CGIBin->new(root => $ENV{INTRANETDIR} || $ENV{OPACDIR});
+
+builder {
+
+       enable_if { $ENV{PLACK_DEBUG} } 'Debug',  panels => [
+               qw(Environment Response Timer Memory),
+#              [ 'Profiler::NYTProf', exclude => [qw(.*\.css .*\.png .*\.ico .*\.js .*\.gif)] ],
+#              [ 'DBITrace', level => 1 ], # a LOT of fine-graded SQL trace
+               [ 'DBIProfile', profile => 2 ],
+       ];
+
+       enable_if { $ENV{PLACK_DEBUG} } 'StackTrace';
+
+       enable_if { $ENV{INTRANETDIR} } "Plack::Middleware::Static",
+               path => qr{^/intranet-tmpl/}, root => '/srv/koha/koha-tmpl/';
+
+       enable_if { $ENV{OPACDIR} } "Plack::Middleware::Static",
+               path => qr{^/opac-tmpl/}, root => '/srv/koha/koha-tmpl/';
+
+       enable_if { $ENV{PLACK_MINIFIER} } "Plack::Middleware::Static::Minifier",
+               path => qr{^/(intranet|opac)-tmpl/},
+               root => './koha-tmpl/';
+
+
+       mount "/cgi-bin/koha" => $app;
+
+};
+
diff --git a/misc/plack/opac-plack.sh b/misc/plack/opac-plack.sh
new file mode 100755 (executable)
index 0000000..a387c1f
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh -xe
+
+# --max-requests decreased from 1000 to 50 to keep memory usage sane
+# --workers 8 which is number of cores on machine
+
+site=ffzg
+test ! -z "$1" && site=$1 && shift
+dir=`dirname $0`
+
+export KOHA_CONF=/etc/koha/sites/$site/koha-conf.xml 
+export OPACDIR="$( xmlstarlet sel -t -v 'yazgfs/config/opacdir' $KOHA_CONF | sed 's,/cgi-bin/opac,,' )"
+export LOGDIR="$( xmlstarlet sel -t -v 'yazgfs/config/logdir' $KOHA_CONF )"
+
+# uncomment to enable logging
+#opt="$opt --access-log $LOGDIR/opac-access.log --error-log $LOGDIR/opac-error.log"
+#opt="$opt --server Starman -M FindBin --max-requests 50 --workers 4 -E deployment"
+sudo -E -u $site-koha plackup -I $OPACDIR/.. $opt $* $dir/koha.psgi