---
name: "Catalyst::Engine::PSGI"
section: "3pm"
platform: "linux"
package: "libcatalyst-engine-psgi-perl"
version: "0.13+dfsg-1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/Catalyst::Engine::PSGI"
---

# Catalyst::Engine::PSGI(3pm)

PSGI engine for Catalyst

## NAME

Catalyst::Engine::PSGI - PSGI engine for Catalyst

## SYNOPSIS

```
  # app.psgi
  use strict;
  use MyApp;
  MyApp->setup_engine('PSGI');
  my $app = sub { MyApp->run(@_) };
```

## DESCRIPTION

Catalyst::Engine::PSGI is a Catalyst Engine that adapts Catalyst into the PSGI gateway protocol.

## COMPATIBILITY

- •

  Currently this engine works with Catalyst 5.8 (Catamoose) or newer.

- •

  Your application is supposed to work with any PSGI servers without any code modifications, but if your application uses `"$c->res->write"` to do streaming write, this engine will buffer the output until your app finishes.

  To do real streaming with this engine, you should implement an IO::Handle-like object that responds to `"getline"` method that returns chunk or undef when done, and set that object to `"$c->res->body"`.

  Alternatively, it is possible to set the body to a code reference, which will be used to stream content as documented in the PSGI spec.

- •

  When your application runs behind the frontend proxy like nginx or lighttpd, this Catalyst engine doesn't automatically recognize the incoming headers like `"X-Forwarded-For"`, because respecting these headers by default causes a potential security issue.

  You have to enable Plack::Middleware::ReverseProxy or Plack::Middleware::ForwardedHeaders to automatically promote those forwarded headers into `"REMOTE_ADDR"` hence IP address of the request.

  ReverseProxy middleware is pretty simple and has no configuration while ForwardedHeaders allows you to configure which upstream host to trust, etc.

## AUTHOR

Tatsuhiko Miyagawa \<miyagawa@bulknews.net\>

Most of the code is taken and modified from Catalyst::Engine::CGI.

## LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

*Catalyst::Engine* PSGI *Plack*
