Plack::Handler(3pm) User Contributed Perl Documentation Plack::Handler(3pm)NAME
Plack::Handler - Connects PSGI applications and Web servers
SYNOPSIS
package Plack::Handler::AwesomeWebServer;
sub new {
my($class, %opt) = @_;
...
return $self;
}
sub run {
my($self, $app) = @_;
# launch the AwesomeWebServer and run $app in the loop
}
# then from command line
plackup -s AwesomeWebServer -a app.psgi
DESCRIPTION
Plack::Handler defines an adapter (connector) interface to adapt plackup and Plack::Runner to various PSGI web servers, such as Apache2 for
mod_perl and Standalone for HTTP::Server::PSGI.
It is an empty class, and as long as they implement the methods defined as an Server adapter interface, they do not need to inherit
Plack::Handler.
If you write a new handler for existing web servers, I recommend you to include the full name of the server module after Plack::Handler
prefix, like Plack::Handler::Net::Server::Coro if you write a handler for Net::Server::Coro. That way you'll be using plackup command line
option like:
plackup -s Net::Server::Coro
that makes it easy to figure out which web server you're going to use.
METHODS
new
$server = FooBarServer->new(%args);
Creates a new adapter object. %args can take arbitrary parameters to configure server environments but common parameters are:
port Port number the server listens to.
host Address the server listens to. Set to undef to listen any interface.
run
$server->run($app);
Starts the server process and when a request comes in, run the PSGI application passed in $app in the loop.
register_service
$server->register_service($app);
Optional interface if your server should run in parallel with other event loop, particularly AnyEvent. This is the same as "run" but
doesn't run the main loop.
SEE ALSO
rackup
perl v5.14.2 2011-02-27 Plack::Handler(3pm)
Check Out this Related Man Page
PLACKUP(1p) User Contributed Perl Documentation PLACKUP(1p)NAME
plackup - Run PSGI application with Plack servers
SYNOPSIS
# read your app from app.psgi file
plackup
# choose .psgi file from ARGV[0] (or with -a option)
plackup hello.psgi
# switch server implementation with --server (or -s)
plackup --server HTTP::Server::Simple --port 9090 --host 127.0.0.1 test.psgi
# use UNIX socket to run FCGI daemon
plackup -s FCGI --listen /tmp/fcgi.sock myapp.psgi
# launch FCGI external server on port 9090
plackup -s FCGI --port 9090
DESCRIPTION
plackup is a command line utility to run PSGI applications from the command line.
plackup automatically figures out the environment it is run in, and runs your application in that environment. FastCGI, CGI, AnyEvent and
others can all be detected. See Plack::Loader for the authorative list.
"plackup" assumes you have an "app.psgi" script in your current directory. The last statement of "app.psgi" should be a code reference
that is a PSGI application:
#!/usr/bin/perl
use MyApp;
my $application = MyApp->new;
my $app = sub { $application->run_psgi(@_) };
ARGUMENTS
.psgi
plackup --host 127.0.0.1 --port 9090 /path/to/app.psgi
The first non-option argument is used as a ".psgi" file path. You can also set this path with "-a" or "--app". If omitted, the default
file path is "app.psgi" in the current directory.
OPTIONS -a, --app
Specifies the full path to a ".psgi" script. You may alternately provide this path as the first argument to "plackup".
-e Evaluates the given perl code as a PSGI app, much like perl's "-e" option:
plackup -e 'sub { my $env = shift; return [ ... ] }'
It is also handy when you want to run a custom application like Plack::App::*.
plackup -MPlack::App::File -e 'Plack::App::File->new(...)->to_app'
You can also specify "-e" option with ".psgi" file path to wrap the application with middleware configuration from the command line.
You can also use Plack::Builder DSL syntax inside "-e" code. For example:
plackup -e 'enable "Auth::Basic", authenticator => ...;' myapp.psgi
is equivalent to the PSGI application:
use Plack::Builder;
use Plack::Util;
builder {
enable "Auth::Basic", authenticator => ...;
Plack::Util::load_psgi("myapp.psgi");
};
Note that when you use "-e" option to enable middleware, plackup doesn't assume the implicit "app.psgi" path. You must either pass the
path to your ".psgi" file in the command line arguments, or load the application inside "-e" after the "enable".
plackup # Runs app.psgi
plackup -e 'enable "Foo"' # Doesn't work!
plackup -e 'enable "Foo"' app.psgi # Works
plackup -e 'enable "Foo"; sub { ... }' # Works
-o, --host
Binds to a TCP interface. Defauts to undef, which lets most server backends bind the any (*) interface. This option is only valid for
servers which support TCP sockets.
-p, --port
Binds to a TCP port. Defaults to 5000. This option is only valid for servers which support TCP sockets.
-s, --server, the "PLACK_SERVER" environment variable
Selects a specific server implementation to run on. When provided, the "-s" or "--server" flag will be preferred over the environment
variable.
If no option is given, plackup will try to detect the best server implementation based on the environment variables as well as modules
loaded by your application in %INC. See Plack::Loader for details.
-S, --socket
Listens on a UNIX domain socket path. Defaults to undef. This option is only valid for servers which support UNIX sockets.
-l, --listen
Listens on one or more addresses, whether "HOST:PORT", ":PORT", or "PATH" (without colons). You may use this option multiple times to
listen on multiple addresses, but the server will decide whether it supports multiple interfaces.
-D, --daemonize
Makes the process run in the background. It's up to the backend server/handler implementation whether this option is respected or not.
-I Specifies Perl library include paths, like "perl"'s -I option. You may add multiple paths by using this option multiple times.
-M Loads the named modules before loading the app's code. You may load multiple modules by using this option multiple times.
-E, --env, the "PLACK_ENV" environment variable.
Specifies the environment option. Setting this value with "-E" or "--env" also writes to the "PLACK_ENV" environment variable. This
allows applications or frameworks to tell which environment setting the application is running on.
# These two are the same
plackup -E deployment
env PLACK_ENV=deployment plackup
Common values are "development", "deployment", and "test". The default value is "development", which causes "plackup" to load the
middleware components: AccessLog, StackTrace and Lint.
-r, --reload
Makes plackup restart the server whenever a file in your development directory changes. This option by default watches the "lib"
directory and the base directory where .psgi file is located. Use "-R" to watch other directories.
Reloading will delay the compilation of your application. Automatic server detection (see "-s" above) may not behave as you expect, if
plackup needs to scan your application for the modules it uses. Avoid problems by specifying "-s" explicitly when using "-r" or "-R".
-R, --Reload
Makes plackup restart the server whenever a file in any of the given directories changes. "-R" and "--Reload" take a comma-separated
list of paths:
plackup -R /path/to/project/lib,/path/to/project/templates
-L, --loader
Specifies the server loading subclass that implements how to run the server. Available options are Plack::Loader (default), Restarter
(automatically set when "-r" or "-R" is used), Delayed and Shotgun.
See Plack::Loader::Delayed and Plack::Loader::Shotgun for more details.
--access-log
Specifies the pathname of a file where the access log should be written. By default, in the development environment access logs will
go to STDERR.
Other options that starts with "--" are passed through to the backend server. See each Plack::Handler backend's documentation for more
details on their available options.
SEE ALSO
Plack::Runner Plack::Loader
perl v5.14.2 2011-07-14 PLACKUP(1p)