Rand Stats

Cro::FCGI

zef:patrickb

NAME

Cro::FCGI

FastCGI support for Cro

Synopsis

Using a network connection

use Cro::FCGI::Server;

my $service = Cro::FCGI::Server.new(
    host => '127.0.0.1',
    port => 43210,
    application => MyCroApp
);
$service.start;

Webserver config (Apache here):

Listen 43210
<VirtualHost 127.0.0.1:43210>
    ProxyFCGIBackendType GENERIC
    ProxyPass "/" "fcgi://127.0.0.1:43211/" enablereuse=on
</VirtualHost>

Using a Unix socket

use Cro::FCGI::Server;

my $service = Cro::FCGI::Server.new(
    socket-path => '/run/cro-fcgi/my-cro-app.sock',
    application => MyCroApp
);
$service.start;

Webserver config (Apache here):

Listen 43210
<VirtualHost 127.0.0.1:43210>
    ProxyFCGIBackendType GENERIC
    ProxyPass "/" "unix:/run/cro-fcgi/my-cro-app.sock|fcgi://127.0.0.1/" enablereuse=on
</VirtualHost>

Description

This module provides a FastCGI frontend for Cro. It allows a simple coupling of a webserver and Cro application.

The module provides a drop-in replacement for Cro::HTTP::Server named Cro::FCGI::Server. It can be instantiated for either a network connetion or a Unix socket connection.

To start listening on a network port pass the host and port arguments.

To start listening on a Unix socket, pass the socket-path argument. Make sure the socket is readable and writable by the webserver process. Note that SELinux can possibly block access to the socket file for the webserver.

Server and client host and port

To access the remote and local host and port of the connection of a given request, use the .socket-host, .socket-port, .peer-host and .peer-port methods of the request object, not the equally named methods of the Cro::Connection object ($request.connection.*). With FCGI, the connection represents the connection to the webserver, not the client!

Limitations

Currently starting the application process automatically is not supported. You have to start the Cro application separately. For Apache this means you should use mod_proxy_fcgi instead of mod_fcgid.

AUTHOR

Patrick Böker patrick.boeker@posteo.de

License

This module is distributed under the terms of the Artistic License 2.0.