has env => (is => 'ro', writer => '_set_env', clearer => '_clear_env');
+my $WARN_ABOUT_ENV = 0;
+around env => sub {
+ my ($orig, $self, @args) = @_;
+ if(@args) {
+ warn "env as a writer is deprecated, you probably need to upgrade Catalyst::Engine::PSGI"
+ unless $WARN_ABOUT_ENV++;
+ return $self->_set_env(@args);
+ }
+ return $self->$orig;
+};
+
# input position and length
has read_length => (is => 'rw');
has read_position => (is => 'rw');
isa => 'CodeRef',
writer => '_set_response_cb',
clearer => '_clear_response_cb',
+ predicate => '_has_response_cb',
);
has _writer => (
-httponly => $val->{httponly} || 0,
)
);
+ if (!defined $cookie) {
+ $c->log->warn("undef passed in '$name' cookie value - not setting cookie")
+ if $c->debug;
+ next;
+ }
push @cookies, $cookie->as_string;
}
sub finalize_headers {
my ($self, $ctx) = @_;
+ # This is a less-than-pretty hack to avoid breaking the old
+ # Catalyst::Engine::PSGI. 5.9 Catalyst::Engine sets a response_cb and
+ # expects us to pass headers to it here, whereas Catalyst::Enngine::PSGI
+ # just pulls the headers out of $ctx->response in its run method and never
+ # sets response_cb. So take the lack of a response_cb as a sign that we
+ # don't need to set the headers.
+
+ return unless $self->_has_response_cb;
+
my @headers;
$ctx->response->headers->scan(sub { push @headers, @_ });
# like Gitalist's --git_dir are possible to get from the app without stupid tricks.
my $server = pop @args if (scalar @args && blessed $args[-1]);
my $options = pop @args if (scalar @args && ref($args[-1]) eq 'HASH');
+ # Back compat hack for applications with old (non Catalyst::Script) scripts to work in FCGI.
+ if (scalar @args && !ref($args[0])) {
+ if (my $listen = shift @args) {
+ $options->{listen} ||= [$listen];
+ }
+ }
if (! $server ) {
- $server = Catalyst::EngineLoader->new(application_name => ref($self))->auto();
+ $server = Catalyst::EngineLoader->new(application_name => ref($self))->auto(%$options);
# We're not being called from a script, so auto detect what backend to
# run on. This should never happen, as mod_perl never calls ->run,
# instead the $app->handle method is called per request.
BEWARE: If you really need to access some environment variable from your Catalyst
application you should use $c->engine->env->{VARNAME} instead of $ENV{VARNAME},
-as in some enviroments the %ENV hash does not contain what you would expect.
+as in some environments the %ENV hash does not contain what you would expect.
=head1 AUTHORS