All Projects → plainblack → Webgui

plainblack / Webgui

A free open source content management system and web application framework. The most widely deployed mod_perl application on the planet.

Programming Languages

perl
6916 projects

This is the PSGI branch of WebGUI8

To try this out:

  1. Start from WebGUI 7.10.23 or the example .conf and create.sql that comes with WebGUI 8.
  2. Run testEnvironment.pl to install all new requirements.
  3. Get a new wgd from http://haarg.org/wgd
  4. Copy etc/WebGUI.conf.original to www.whatever.com.conf; edit it and set dbuser, dbpass, dsn, uploadsPath (eg to /data/domains/www.example.com/public/uploads/), extrasPath, maintenancePage and siteName
  5. Set WEBGUI_CONFIG to point at your new config file
  6. $ export PERL5LIB='/data/WebGUI/lib'
  7. $ wgd reset --upgrade
  8. $ cd /data/WebGUI (or whereever you unpacked it)
  9. $ rsync -r -a (or cp -a) /data/WebGUI/www/extras /data/domains/www.example.com/public/ (from whereever you unpacked it to whereever you pointed extrasPath to; note 'extras' goes inside 'public', both under where extrasPath points to)

To start it:

  1. $ 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)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].