Added perlbal and Plack::Middleware::WebGUI to simplify psgi file
This commit is contained in:
parent
784e0bd73c
commit
b9bff5a2f6
6 changed files with 80 additions and 67 deletions
|
|
@ -18,4 +18,10 @@
|
|||
FastCgiServer /data/WebGUI/etc/dev.localhost.localdomain.fcgi
|
||||
ScriptAlias / /data/WebGUI/etc/dev.localhost.localdomain.fcgi/
|
||||
|
||||
# mod_psgi
|
||||
#<Location />
|
||||
# SetHandler psgi
|
||||
# PSGIApp /data/WebGUI/etc/dev.localhost.localdomain.psgi
|
||||
#</Location>
|
||||
|
||||
</VirtualHost>
|
||||
|
|
|
|||
7
etc/dev.localhost.localdomain.perlbal
Normal file
7
etc/dev.localhost.localdomain.perlbal
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
LOAD PSGI
|
||||
CREATE SERVICE psgi
|
||||
SET role = web_server
|
||||
SET listen = 127.0.0.1:80
|
||||
SET plugins = psgi
|
||||
PSGI_APP = dev.localhost.localdomain.psgi
|
||||
ENABLE psgi
|
||||
|
|
@ -1,49 +1,25 @@
|
|||
BEGIN {
|
||||
# Define your site settings here
|
||||
# These are the config values that normally appear in your wre's
|
||||
# site.modperl.conf and site.modproxy.conf
|
||||
our $WEBGUI_ROOT = '/data/WebGUI';
|
||||
our $WEBGUI_CONFIG = 'dev.localhost.localdomain';
|
||||
our $DOCUMENT_ROOT = '/data/domains/dev.localhost.localdomain/public';
|
||||
}
|
||||
use lib "$WEBGUI_ROOT/lib";
|
||||
#use local::lib $WEBGUI_ROOT;
|
||||
use WebGUI;
|
||||
use Plack::Builder;
|
||||
|
||||
my %SETTINGS = (
|
||||
'wg.WEBGUI_ROOT' => $WEBGUI_ROOT,
|
||||
'wg.WEBGUI_CONFIG' => "$WEBGUI_CONFIG.conf",
|
||||
'wg.DOCUMENT_ROOT' => $DOCUMENT_ROOT,
|
||||
'wg.DIR_CONFIG.WebguiRoot' => $WEBGUI_ROOT,
|
||||
'wg.DIR_CONFIG.WebguiConfig' => "$WEBGUI_CONFIG.conf",
|
||||
);
|
||||
|
||||
my $wg = sub {
|
||||
my $env = shift;
|
||||
@{$env}{ keys %SETTINGS } = values %SETTINGS;
|
||||
WebGUI::handle_psgi($env);
|
||||
};
|
||||
use lib '/data/WebGUI/lib';
|
||||
use WebGUI;
|
||||
|
||||
builder {
|
||||
|
||||
# Populate $env from site.conf
|
||||
add 'Plack::Middleware::WebGUI',
|
||||
root => '/data/WebGUI',
|
||||
config => 'dev.localhost.localdomain.conf';
|
||||
|
||||
# /extras - deliver via Plack::Middleware::Static
|
||||
# Handle /extras via Plack::Middleware::Static
|
||||
# (or Plack::Middleware::WebGUI could do this for us by looking up extrasPath and extrasURL in site.conf)
|
||||
add 'Plack::Middleware::Static',
|
||||
path => qr{^/extras/},
|
||||
root => "$SETTINGS{'wg.WEBGUI_ROOT'}/www/";
|
||||
root => '/data/WebGUI/www';
|
||||
|
||||
# /uploads - deliver via Plack::Middleware::WGAccess
|
||||
# This takes the place of WebGUI::URL::Uploads in handling .wgaccess and
|
||||
# delivery of static files in /uploads
|
||||
# Handle /uploads via Plack::Middleware::WGAccess (including .wgaccess)
|
||||
# (or Plack::Middleware::WebGUI could do this for us by looking up uploadsPath and uploadsURL in site.conf)
|
||||
add 'Plack::Middleware::WGAccess',
|
||||
path => qr{^/uploads/},
|
||||
settings => {%SETTINGS};
|
||||
root => '/data/domains/dev.localhost.localdomain/public';
|
||||
|
||||
add 'Plack::Middleware::XFramework', framework => 'WebGUI';
|
||||
|
||||
# AccessLog already enabled by default if you are using the plackup script
|
||||
# add 'Plack::Middleware::AccessLog',
|
||||
# format => "combined";
|
||||
|
||||
$wg;
|
||||
sub { WebGUI::handle_psgi(shift) };
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ use strict;
|
|||
use warnings;
|
||||
use base qw/Plack::Middleware::Static/;
|
||||
use Path::Class 'dir';
|
||||
__PACKAGE__->mk_accessors('settings');
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
|
@ -17,13 +16,6 @@ Plack Middleware that delivers static files with .wgaccess awareness
|
|||
|
||||
sub _handle_static {
|
||||
my($self, $env) = @_;
|
||||
|
||||
# Populate $env with $self->settings so that we get consistent wg API behaviour
|
||||
my %settings = %{$self->settings};
|
||||
@{$env}{keys %settings} = values %settings;
|
||||
|
||||
# Populate $self->root from $SETTINGS so that it doesn't need to be specified in psgi file
|
||||
$self->root($settings{'wg.DOCUMENT_ROOT'});
|
||||
|
||||
#######################################
|
||||
# Copied from Plack::Middleware::Static::_handle_static
|
||||
|
|
|
|||
30
lib/Plack/Middleware/WebGUI.pm
Normal file
30
lib/Plack/Middleware/WebGUI.pm
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
package Plack::Middleware::WebGUI;
|
||||
use strict;
|
||||
use warnings;
|
||||
use base qw/Plack::Middleware/;
|
||||
|
||||
__PACKAGE__->mk_accessors('root', 'config');
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Plack::Middleware::WebGUI
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Plack Middleware that populates $env
|
||||
|
||||
In the future we might want to read the site.conf here and then cache it
|
||||
|
||||
=cut
|
||||
|
||||
sub call {
|
||||
my $self = shift;
|
||||
my $env = shift;
|
||||
|
||||
$env->{'wg.WEBGUI_ROOT'} = $self->root;
|
||||
$env->{'wg.WEBGUI_CONFIG'} = $self->config;
|
||||
|
||||
$self->app->($env);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
@ -39,23 +39,24 @@ sub AUTOLOAD {
|
|||
}
|
||||
|
||||
# Emulate/delegate/fake Apache2::* subs
|
||||
sub uri { shift->{request}->request_uri(@_) }
|
||||
sub param { shift->{request}->param(@_) }
|
||||
sub params { shift->{request}->params(@_) }
|
||||
sub headers_in { shift->{request}->headers(@_) }
|
||||
sub headers_out { shift->{headers_out} }
|
||||
sub protocol { shift->{request}->protocol(@_) }
|
||||
sub status { shift->{response}->status(@_) }
|
||||
sub sendfile { $_[0]->{sendfile} = $_[1] }
|
||||
sub server { shift->{server} }
|
||||
sub method { shift->{request}->method }
|
||||
sub upload { shift->{request}->upload(@_) }
|
||||
sub status_line { }
|
||||
sub auth_type { } # should we support this?
|
||||
sub handler { 'perl-script' } # or not..?
|
||||
sub uri { shift->{request}->request_uri(@_) }
|
||||
sub param { shift->{request}->param(@_) }
|
||||
sub params { shift->{request}->params(@_) }
|
||||
sub headers_in { shift->{request}->headers(@_) }
|
||||
sub headers_out { shift->{headers_out} }
|
||||
sub protocol { shift->{request}->protocol(@_) }
|
||||
sub status { shift->{response}->status(@_) }
|
||||
sub sendfile { $_[0]->{sendfile} = $_[1] }
|
||||
sub server { shift->{server} }
|
||||
sub method { shift->{request}->method }
|
||||
sub upload { shift->{request}->upload(@_) }
|
||||
sub dir_config { shift->{server}->dir_config(@_) }
|
||||
sub status_line { }
|
||||
sub auth_type { } # should we support this?
|
||||
sub handler {'perl-script'} # or not..?
|
||||
|
||||
sub content_type {
|
||||
my ($self, $ct) = @_;
|
||||
sub content_type {
|
||||
my ( $self, $ct ) = @_;
|
||||
$self->{headers_out}->set( 'Content-Type' => $ct );
|
||||
}
|
||||
|
||||
|
|
@ -82,11 +83,6 @@ sub print {
|
|||
push @{ $self->{body} }, @_;
|
||||
}
|
||||
|
||||
sub dir_config {
|
||||
my ( $self, $c ) = @_;
|
||||
return $self->{env}->{"wg.DIR_CONFIG.$c"};
|
||||
}
|
||||
|
||||
sub pnotes {
|
||||
my ( $self, $key ) = ( shift, shift );
|
||||
return wantarray ? %{ $self->{pnotes} } : $self->{pnotes} unless defined $key;
|
||||
|
|
@ -162,6 +158,12 @@ sub AUTOLOAD {
|
|||
|
||||
sub dir_config {
|
||||
my ( $self, $c ) = @_;
|
||||
|
||||
# Translate the legacy WebguiRoot and WebguiConfig PerlSetVar's into known values
|
||||
return $self->{env}->{'wg.WEBGUI_ROOT'} if $c eq 'WebguiRoot';
|
||||
return $self->{env}->{'wg.WEBGUI_CONFIG'} if $c eq 'WebguiConfig';
|
||||
|
||||
# Otherwise, we might want to provide some sort of support (which Apache is still around)
|
||||
return $self->{env}->{"wg.DIR_CONFIG.$c"};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue