Bug 20582: Turn Koha into a Mojolicious application
authorJulian Maurice <julian.maurice@biblibre.com>
Thu, 12 Apr 2018 18:42:13 +0000 (20:42 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 6 Oct 2020 10:00:04 +0000 (12:00 +0200)
Bug 20582: Turn Koha into a Mojolicious application

This patch is a proof-of-concept of Koha as a Mojolicious application

This has several benefits:
- Development setup is easier. No need for apache or nginx. Just run
  `morbo bin/intranet` or `morbo bin/opac` and go to
  http://localhost:3000 (URL rewrites and static files are handled by
  the app)
- apache2/nginx configuration is simpler too (an example of nginx
  configuration is included in the patch)
- starman and plack middlewares can still be used for debug or gzip
  compression for instance (see app.psgi)
- Using Test::Mojo we can test the whole application, as we do with the
  REST API (which is a Mojolicious application too)
- It opens a way for converting CGI scripts into Mojolicious
  controllers and actions (even if that's not possible at the moment
  because of the authentication code)

It uses the same mechanism as Plack::App::CGIBin to deal with CGI
scripts, so it should be equivalent in terms of performance

How to test ?
- Run `morbo bin/intranet`, then go to http://localhost:3000/ and try to
  find bugs. Check the REST API at http://localhost:3000/api/v1
- Run `morbo bin/opac`, then go to http://localhost:3000/ and try to
  find bugs. Check the REST API at http://localhost:3000/api/v1
- Run `starman -l :5000 -l :5001` and verify that intranet
  (http://localhost:5000) and opac (http://localhost:5001) work normally
- Read the code (and the comments), it's not very long

Signed-off-by: Jerome Charaoui <jcharaoui@cmaisonneuve.qc.ca>
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Koha/App/Intranet.pm [new file with mode: 0644]
Koha/App/Opac.pm [new file with mode: 0644]
Koha/App/Plugin/CGIBinKoha.pm [new file with mode: 0644]
Koha/App/Plugin/RESTV1.pm [new file with mode: 0644]
app.psgi [new file with mode: 0644]
bin/intranet [new file with mode: 0755]
bin/opac [new file with mode: 0755]
etc/nginx.conf [new file with mode: 0644]