=head1 NAME Catalyst::Manual::Tutorial::01_Intro - Catalyst Tutorial - Chapter 1: Introduction =head1 OVERVIEW This is B for the Catalyst tutorial. L =over 4 =item 1 B<01_Introduction> =item 2 L =item 3 L =item 4 L =item 5 L =item 6 L =item 7 L =item 8 L =item 9 L =item 10 L =back =head1 DESCRIPTION This tutorial provides a multi-part introduction to the Catalyst Web Framework. It seeks to provide a rapid overview of many of its most commonly used features. The focus is on the real-world best practices required in the construction of nearly all Catalyst applications. Although the primary target of the tutorial is users new to the Catalyst framework, experienced users may wish to review specific sections (for example, how to use DBIC for their model classes, how to add authentication and authorization to an existing application, and/or form management). The most recent code for the tutorial is included on the Tutorial Virtual Machine you can download from: svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/ CatalystTutorial This will download the most recent code for each chapter of the tutorial into the CatalystTutorial directory on your machine. B B It should make little or no difference to Catalyst's operation, B to avoid issues that may crop up if you are working with a different configuration. We have tested the Tutorial Virtual Machine to make sure all of the examples work correctly, but it is hard to guarantee this on other platforms and versions. If you would prefer to install directly from CPAN and not use the Tutorial Virtual machine, you can download the example program and all the necessary dependencies to your local machine by installing the C distribution: cpan Task::Catalyst::Tutorial This will also test to make sure the dependencies are working. If you have trouble installing these, please ask for help on the #catalyst IRC channel, or the Catalyst mailing list. Subjects covered by the tutorial include: =over 4 =item * A simple application that lists and adds books. =item * The use of L (DBIC) for the model (including some of the more advanced techniques you will probably want to use in your applications). =item * How to write CRUD (Create, Read, Update, and Delete) operations in Catalyst. =item * Authentication ("auth"). =item * Role-based authorization ("authz"). =item * Attempts to provide an example showing current (5.9) Catalyst practices. =item * The use of Template Toolkit (TT). =item * Useful techniques for troubleshooting and debugging Catalyst applications. =item * The use of SQLite as a database (with code also provided for MySQL and PostgreSQL). (Note: Because we make use of the DBIx::Class Object Relational Mapping [ORM] layer, out our application will be database agnostic and can easily be used by any of the databases supported by DBIx::Class.) =item * The use of L or L for automated form processing and validation. =back This tutorial makes the learning process its main priority. For example, the level of comments in the code found here would likely be considered excessive in a "normal project." Because of their contextual value, this tutorial will generally favor inline comments over a separate discussion in the text. It also deliberately tries to demonstrate multiple approaches to various features (in general, you should try to be as consistent as possible with your own production code). Furthermore, this tutorial tries to minimize the number of controllers, models, TT templates, and database tables. Although this does result in things being a bit contrived at times, the concepts should be applicable to more complex environments. More complete and complicated example applications can be found at L and in the C area of the Catalyst Subversion repository at L. ***Todo: update link above? =head1 STARTING WITH THE TUTORIAL VIRTUAL MACHINE =over 4 =item 1 Download the C image from L. =item 2 Uncompress the image: tar zxvf CatalystTutorial.tgz =item 3 Boot the virtual machine using a tool like VMWare Player L or VirtualBox L. =item 4 Once you get a login prompt, enter the username B and a password for C. You should now be at a prompt that looks like: catalyst login: root Password: catalyst ... root@catalyst:~# =item 5 Type "C" to get the IP address assigned to the virtual machine. You should get output along the lines of: eth0 Link encap:Ethernet HWaddr 00:01:22:3b:45:69 inet addr:192.168.245.128 Bcast:192.168.245.255 Mask:255.255.255.0 ... You want the IP address on the second line below the C interface. The image it design to automatically use a DHCP-assigned address. If DHCP is not working or is not available in your location, most virtual machine "host" environments let's you select between one of several different types of networking between the "guest" and the "host" machine. 1) Bridged 2) NAT 3) Local host only The Tutorial Virtual Machine defaults to "Bridged" -- this should result in the VM acting like another device on your network that will get a different DHCP IP address than the host machine. The advantage of this approach, is that you can easily SSH and web browse to the guest virtual machine. In some environments, you might have better luck with "NAT" (Network Address Translation) mode. With this configuration, the guest VM shares the same IP address as the host machine. The downside of the approach is that special configuration is required if you want to be able to SSH or web browse to the guest VM (some virtual machine host environments let you configure a "static NAT" or "port forwarding" to reach the guest OS). "Local host only" mode let's the guest VM and the host machine talk on a "private subnet" that other devices in your network cannot reach. Consult the documentation on your virtual machine host environment for help configuring the options above. =item 6 B, open an SSH client and connect to the IP address found in the previous step. You should get a login prompt (accept the SSH key). Login with the same username and password: B / B =item 7 B, change to the sample code directory for Chapter 3 included with the Tutorial Virtual Machine and start the Catalyst Development Server: $ cd Final/Chapter03 $ perl scripts/myapp_server -r =item 8 B, open a web browser and go to B, where C is the IP address to your virtual machine that you looked up in Step 5. For example, if your virtual machine is using the IP address C<192.168.0.21>, you would put the following URL into your web browser: http://192.168.0.21:3000/ Make sure you don't forget the B<:3000> to use port 3000 instead of the usual port 80 that is used by HTTP by default. You should get a Catalyst Welcome Screen. If you do, feel free to jump right in to L of the tutorial. If you don't go get the Catalyst Welcome Screen, go back and carefully check each of the steps above. =item 9 B The VI/VIM editor is already installed on the Tutorial Virtual Machine. In order to reduce the size of the download, Emacs is not pre-installed. Since people obviously have very strong opinions about which editor is best, :-) Debian fortunately make it very easy to install Emacs: $ aptitude install emacs =back You will note that the Tutorial Virtual Machine uses L so that the Perl modules are run from ~/perl5 (in this case, /root/perl5) vs. the usual location of your "system Perl". We recommend that you also consider using this very handy module. It can greatly ease the process of maintaining and testing different combinations or Perl modules across development, staging, and production servers. (The "relocatable Perl" feature can also be used to to run both the modules B Perl itself from your home directory [or any other directory you chose]). =head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL This tutorial was built using the following resources. Please note that you may need to make adjustments for different environments and versions (note that trailing zeros in version numbers are not significant and may get dropped with some techniques for viewing them; for example, Catalyst v5.80020 might show up as 5.8002): =over 4 =item * Debian 6 (Squeeze) =item * Catalyst v5.90002 =item * Catalyst::Devel v1.34 =item * DBIx::Class v0.08195 =item * Catalyst::Model::DBIC::Schema v0.54 =item * Template Toolkit v2.22 =item * HTML::FormFu -- v0.09004 =item * B You can check the versions you have installed with the following command (note the slash before the space): perl -M<_mod_name_>\ 999 or: perl -M<_mod_name_> -e 'print "$<_mod_name_>::VERSION\n"' For example: perl -MCatalyst::Devel\ 999 or: perl -MCatalyst::Devel -e 'print "$Catalyst::Devel::VERSION\n";' =item * This tutorial will show URLs in the format of C, but if you are running your web browser from outside the Tutorial Virtual Machine, you will want to substitute the IP address of your VM for the C in the URLs (again, you can get the IP address for eth0 from the C command). For example, if your VM has an IP address of 192.168.245.128, you will want to use a base URL of C. Note that the development server defaults to port 3000 (you can change with with the "-p" option on the command line. B Depending on the web browser you are using, you might need to hit C or C to pull a fresh page when testing your application at various points (see L for a comprehensive list of options for each browser). Also, the C<-k> keepalive option to the development server can be necessary with some browsers (especially Internet Explorer). =back =head1 DATABASES This tutorial will primarily focus on SQLite because of its simplicity of installation and use; however, modifications in the script required to support MySQL and PostgreSQL will be presented in the Appendix. B One of the advantages of using tools like Catalyst and DBIC is that applications become much more database independent. As such, you will notice that only the C<.sql> files used to initialize the database change between database systems: most of the code generally remains the same. You can jump to the next chapter of the tutorial here: L =head1 AUTHOR Kennedy Clark, C Please report any errors, issues or suggestions to the author. The most recent version of the Catalyst Tutorial can be found at L. Copyright 2006-2010, Kennedy Clark, under the Creative Commons Attribution Share-Alike License Version 3.0 (L).