Fork of WebGUI 7.10, maintained by Oqapi
https://git.oqapi.nl/oqapi/webgui
This is minimal in implementation right now in that there's no support for passing args, which would generally be objects mixed with strings, to the middlewares being added, as would be necessary if the .psgi files were to be largely migrated to the config files. I agree that it's important that upgrade scripts be able to add middleware (probably custom ones that know how to get the session from %$env) but I'm not convinced of the utility of moving much logic out of share/site.psgi. |
||
|---|---|---|
| docs | ||
| eg | ||
| etc | ||
| lib | ||
| sbin | ||
| share | ||
| t | ||
| www | ||
| .gitignore | ||
| .perltidyrc | ||
| .proverc | ||
| app.psgi | ||
| asset_status.ods | ||
| benchmark.pl | ||
| README | ||
| TODO | ||
| WebGUI-Session-Plack.pm | ||
This is the PSGI branch of WebGUI8 To try this out: 0) Start from WebGUI 7.10.4 or the example .conf and create.sql that comes with WebGUI 8 1) Run testEnvironment.pl to install Plack 2) Get a new wgd from http://haarg.org/wgd 3) $ wgd reset --upgrade 4) $ cd /data/WebGUI (or whereever you unpacked it) 5) $ rsync -r -a (or cp -a) /data/WebGUI/www/extras /data/domains/www.example.com/public/ 6) $ export PERL5LIB='/data/WebGUI/lib:/data/WebGUI/t/lib' To start it: 7) $ plackup app.psgi See docs/install.txt for more detailed installation instructions. Currently, the best performance is achieved via: plackup -E none -s Starman --workers 10 --disable-keepalive You can benchmark your server via: ab -t 3 -c 10 -k http://dev.localhost.localdomain:5000/ | grep Req I'm currently getting 370 requests/second, whereas I'm getting 430/second on the non-PSGI WebGUI8 branch. = ARCHITECTURE = * The root level app.psgi file loads all the config files found and loads the site specific psgi file for each, linking them to the proper host names. * The site psgi file uses the WEBGUI_CONFIG environment variable to find the config. * It instantiates the $wg WebGUI object (one per app). * $wg creates and stores the WebGUI::Config (one per app) * $wg creates the $app PSGI app code ref (one per app) * WebGUI::Middleware::Session is wrapped around $app at the outer-most layer so that it can open and close the $session WebGUI::Session. Any other wG middleware that needs $session should go in between it and $app ($session created one per request) * $session creates the $request WebGUI::Session::Request and $response WebGUI::Session::Response objects (one per request)