Fork of WebGUI 7.10, maintained by Oqapi
https://git.oqapi.nl/oqapi/webgui
It turned out this problem is related to Moose and/or Class::MOP. I downgraded Moose to 1.25, and Class::MOP to 1.12, and then I got the console just fine when I clicked on "turn admin on".
I managed to operate the Perl debugger on the code, by putting Enbugger->stop at the desired point. I could then debug it interactively.
The stack trace at the point of failure in Search.pm is:
DB<3> T
$ = WebGUI::Asset::Wobject::Search::_searchRoot_builder(ref(WebGUI::Asset::Wobject::Search)) called from file `constructor WebGUI::Asset::Wobject::Search::new (defined at /home/amir/Downloads/webgui/lib/WebGUI/Asset/Wobject/Search.pm line 214)' line 224
$ = WebGUI::Asset::Wobject::Search::new('WebGUI::Asset::Wobject::Search', ref(HASH)) called from file `/home/amir/Downloads/webgui/lib/WebGUI/Asset.pm' line 1937
$ = WebGUI::Asset::newByPropertyHashRef('WebGUI::Asset', ref(WebGUI::Session), ref(HASH)) called from file `/home/amir/Downloads/webgui/lib/WebGUI/Admin.pm' line 186
@ = WebGUI::Admin::getAssetTypes(ref(WebGUI::Admin)) called from file `/home/amir/Downloads/webgui/lib/WebGUI/Admin.pm' line 279
$ = WebGUI::Admin::getNewContentTemplateVars(ref(WebGUI::Admin)) called from file `/home/amir/Downloads/webgui/lib/WebGUI/Admin.pm' line 811
$ = WebGUI::Admin::www_view(ref(WebGUI::Admin)) called from file `/home/amir/Downloads/webgui/lib/WebGUI/Content/Admin.pm' line 80
$ = WebGUI::Content::Admin::handler(ref(WebGUI::Session)) called from file `/home/amir/Downloads/webgui/lib/WebGUI/Pluggable.pm' line 287
$ = WebGUI::Pluggable::run('WebGUI::Content::Admin', 'handler', ref(ARRAY)) called from file `/home/amir/Downloads/webgui/lib/WebGUI.pm' line 165
$ = eval {...} called from file `/home/amir/Downloads/webgui/lib/WebGUI.pm' line 165
. = WebGUI::handle(ref(WebGUI), ref(WebGUI::Session)) called from file `/home/amir/Downloads/webgui/lib/WebGUI.pm' line 77
@ = WebGUI::call(ref(WebGUI), ref(HASH)) called from file `/usr/lib/perl5/site_perl/5.12.3/Plack/Component.pm' line 39
...
DB<1> l
38==> my $session = shift->session;
39 return $session->setting->get("defaultPage");
40 }
41 property classLimiter => (
42 fieldType => "checkList",
43 default => undef,
44 vertical => 1,
45 tab => "properties",
46 hoverHelp => ["class limiter description", 'Asset_Search'],
47 label => ["class limiter", 'Asset_Search'],
DB<1> p join(",",keys %{$_[0]});
mobileStyleTemplateId,displayTitle,assetSize,classLimiter,newWindow,extraHeadTagsPacked,ownerUserId,extraHeadTags,paginateAfter,isPrototype,isPackage,isHidden,groupIdEdit,encryptPage,inheritUrlFromParent,description,isExportable,lastModified,groupIdView,printableStyleTemplateId
NOTE: "session" is not found there.
With a downgraded Moose:
38==> my $session = shift->session;
39 return $session->setting->get("defaultPage");
40 }
41 property classLimiter => (
42 fieldType => "checkList",
43 default => undef,
44 vertical => 1,
45 tab => "properties",
46 hoverHelp => ["class limiter description", 'Asset_Search'],
47 label => ["class limiter", 'Asset_Search'],
DB<1> p join(",",keys %{$_[0]});
skipNotification,uiLevel,displayTitle,classLimiter,newWindow,synopsis,extraHeadTagsPacked,extraHeadTags,ownerUserId,session,paginateAfter,isHidden,groupIdEdit,encryptPage,inheritUrlFromParent,description,title,printableStyleTemplateId
DB<2>
("session" is found.)
Amir
|
||
|---|---|---|
| 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) Copy etc/WebGUI.conf.original to www.whatever.com.conf; edit it and set dbuser, dbpass,
dsn, and uploadsPath (eg to /data/domains/www.example.com/public/uploads/)
4) Set WEBGUI_CONFIG to point at your new config file
4) $ wgd reset --upgrade
5) $ cd /data/WebGUI (or whereever you unpacked it)
6) $ rsync -r -a (or cp -a) /data/WebGUI/www/extras /data/domains/www.example.com/public/
7) $ export PERL5LIB='/data/WebGUI/lib'
To start it:
8) $ 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)