NAME
Catalyst::Manual::Tutorial - Getting started with Catalyst
DESCRIPTION
This document aims to get you up and running with Catalyst.
NOTE: THIS DOCUMENT IS STILL VERY MUCH AT AN ALPHA STAGE.
Please send comments, corrections and suggestions for improvements to A.Ford@ford-mason.co.uk
Installation
The first step is to install Catalyst, and the simplest way to do this is to install the Catalyst bundle from CPAN:
$ perl -MCPAN -e 'install Bundle::Catalyst'
This will retrieve Catalyst and a number of useful extensions and install them for you.
Setting up your application
Catalyst includes a helper script, catalyst.pl
, that will set up a skeleton application for you:
$ catalyst.pl My::App
created "My-App"
created "My-App/script"
created "My-App/lib"
created "My-App/root"
created "My-App/t"
created "My-App/t/m"
created "My-App/t/v"
created "My-App/t/c"
created "My-App/lib/My/App"
created "My-App/lib/My/App/M"
created "My-App/lib/My/App/V"
created "My-App/lib/My/App/C"
created "My-App/lib/My/App.pm"
created "My-App/Makefile.PL"
created "My-App/README"
created "My-App/Changes"
created "My-App/t/01app.t"
created "My-App/t/02podcoverage.t"
created "My-App/script/server.pl"
created "My-App/script/test.pl"
created "My-App/script/create.pl"
This creates the directory structure shown.
Testing out the sample application
You can test out your new application by running the server script that catalyst provides:
$ cd My-App
$ script/server.pl
[Sun Mar 20 12:31:18 2005] [catalyst] [debug] Debug messages enabled
[Sun Mar 20 12:31:18 2005] [catalyst] [debug] Loaded engine "Catalyst::Engine::CGI"
[Sun Mar 20 12:31:18 2005] [catalyst] [debug] Initialized components ""
[Sun Mar 20 12:31:18 2005] [catalyst] [info] My::App powered by Catalyst 4.26
[Sun Mar 20 12:31:18 2005] [catalyst] [debug] "My::App" defined "!default" as "CODE(0x83fd570)"
You can connect to your server at http://localhost:3000
The server is now waiting for you to make requests of it. Try using telnet to manually make a simple GET request of the server (when telnet responds with "Escape character is '^]'.", type "GET / HTTP/1.0" and hit return twice):
$ telnet localhost 3000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.0 200
Server: Catalyst/4.26
Status: 200
Date: Sun, 20 Mar 2005 12:31:55 GMT
X-catalyst: 4.26
Content-length: 40
Content-Type: text/html; charset=ISO-8859-1
Congratulations, My::App is on Catalyst!
Connection closed by foreign host.
$
More trace messages will appear in the original terminal window:
[Sun Mar 20 12:31:55 2005] [catalyst] [debug] ********************************
[Sun Mar 20 12:31:55 2005] [catalyst] [debug] * Request 1 (0.027/s) [9818]
[Sun Mar 20 12:31:55 2005] [catalyst] [debug] ********************************
[Sun Mar 20 12:31:55 2005] [catalyst] [debug] "GET" request for ""
[Sun Mar 20 12:31:55 2005] [catalyst] [debug] Using default action
[Sun Mar 20 12:31:55 2005] [catalyst] [info] Processing "!default" took 0.000033s
[Sun Mar 20 12:31:55 2005] [catalyst] [info] Request took 0.051399s (19.456/s)
The server will continue running until you interrupt it.
The application can also be tested from the command line using the generated helper script, script/test.pl
.
Getting your application invoked
Catalyst applications are intended to be run from mod_perl, but can also be run as CGI scripts. Running under mod_perl gives better performance, but for development purposes you may want to run your application as a CGI script, especially as each changes to your application code take effect under CGI without having to restart the web server.
To run from mod_perl you need to add something like this to your Apache configuration file:
<Location /myapp>
SetHandler perl-script
PerlHandler MyApp
</Location>
To run as a CGI script you need a wrapper script like:
#!/usr/bin/perl -w
use strict;
use lib '/path/to/MyApp/lib';
use MyApp;
MyApp->run;
Catalyst outputs a complete HTTP response, which is not what is expected of a CGI script. You need to configure the script as a so-called "Non-parsed Headers" script for it to function properly. To do this in Apache just name the script starting with nph-
.
Extending the generated code
The generated application code looks like this:
package My::App;
use strict;
use Catalyst qw/-Debug/;
our $VERSION = '0.01';
My::App->config(
name => 'My::App',
root => '/home/andrew/My-App/root',
);
My::App->action(
'!default' => sub {
my ( $self, $c ) = @_;
$c->res->output('Congratulations, My::App is on Catalyst!');
},
);
1;
You can start extending the application by adding new actions:
My::App->action(
'test1' => sub {
my ( $self, $c ) = @_;
$c->res->output('In a new test action #1');
},
'test1' => sub {
my ( $self, $c ) = @_;
$c->res->output('In a new test action #1');
},
'!default' => sub {
my ( $self, $c ) = @_;
$c->res->output('Congratulations, My::App is on Catalyst!');
},
);
AUTHOR
Andrew Ford, A.Ford@ford-mason.co.uk
COPYRIGHT
This program is free software, you can redistribute it and/or modify it under the same terms as Perl itself.