Integrate sqlite3 clarification and link by wolfman2000 from tutorial_role_updates...
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / 01_Intro.pod
CommitLineData
d442cc9f 1=head1 NAME
2
3ab6187c 3Catalyst::Manual::Tutorial::01_Intro - Catalyst Tutorial - Chapter 1: Introduction
d442cc9f 4
5
6=head1 OVERVIEW
7
4b4d3884 8This is B<Chapter 1 of 10> for the Catalyst tutorial.
d442cc9f 9
10L<Tutorial Overview|Catalyst::Manual::Tutorial>
11
12=over 4
13
14=item 1
15
3ab6187c 16B<01_Introduction>
d442cc9f 17
18=item 2
19
3ab6187c 20L<Catalyst Basics|Catalyst::Manual::Tutorial::02_CatalystBasics>
d442cc9f 21
22=item 3
23
3ab6187c 24L<More Catalyst Basics|Catalyst::Manual::Tutorial::03_MoreCatalystBasics>
d442cc9f 25
26=item 4
27
3ab6187c 28L<Basic CRUD|Catalyst::Manual::Tutorial::04_BasicCRUD>
d442cc9f 29
30=item 5
31
3ab6187c 32L<Authentication|Catalyst::Manual::Tutorial::05_Authentication>
d442cc9f 33
34=item 6
35
3ab6187c 36L<Authorization|Catalyst::Manual::Tutorial::06_Authorization>
d442cc9f 37
38=item 7
39
3ab6187c 40L<Debugging|Catalyst::Manual::Tutorial::07_Debugging>
d442cc9f 41
42=item 8
43
3ab6187c 44L<Testing|Catalyst::Manual::Tutorial::08_Testing>
d442cc9f 45
46=item 9
47
3ab6187c 48L<Advanced CRUD|Catalyst::Manual::Tutorial::09_AdvancedCRUD>
1def4a20 49
50=item 10
51
3ab6187c 52L<Appendices|Catalyst::Manual::Tutorial::10_Appendices>
d442cc9f 53
54=back
55
1def4a20 56
d442cc9f 57=head1 DESCRIPTION
58
ffeb7448 59This tutorial provides a multi-part introduction to the Catalyst web
d442cc9f 60framework. It seeks to provide a rapid overview of many of its most
61commonly used features. The focus is on the real-world best practices
62required in the construction of nearly all Catalyst applications.
63
64Although the primary target of the tutorial is users new to the Catalyst
65framework, experienced users may wish to review specific sections (for
1def4a20 66example, how to use DBIC for their model classes, how to add
67authentication and authorization to an existing application, or form
68management).
d442cc9f 69
70You can obtain the code for all the tutorial examples from the
71catalyst subversion repository by issuing the command:
72
028b4e1a 73 svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/ CatalystTutorial
d442cc9f 74
4b4d3884 75This will download the most recent tarball for each chapter of the
028b4e1a 76tutorial into the CatalystTutorial directory on your machine.
d442cc9f 77
3d9ae335 78B<These reference implementations are provided so that when you follow
79the tutorial, you can use the code from the subversion repository to
80ensure that your system is set up correctly, and that you have not
81inadvertently made any typographic errors, or accidentally skipped
82part of the tutorial.>
83
ffeb7448 84B<NOTE: You can use any Perl-supported OS and environment to run
3533daff 85Catalyst.> It should make little or no difference to Catalyst's
acbd7bdd 86operation, B<but this tutorial has been written using the Debian 5
3f043f41 87live CD> because that represents a quick and easy way for most people to
acbd7bdd 88try out Catalyst with virtually zero setup time and hassles. Also,
89the tutorial has been tested to work correctly with the versions of
90Catalyst and all the supporting modules in Debian 5 (see "VERSIONS
91AND CONVENTIONS USED IN THIS TUTORIAL" below for the specific versions
92for some of the key modules), so B<if you think you might be running
93into an issue related to versions> (for example, a module changed its
94behavior in a newer version or a bug was introduced), B<it might be
444d6b27 95worth giving Debian 5 a try>.
3533daff 96
444d6b27 97If you plan to follow along with Debian 5, you can jump down to the
98"Debian" section under L</"CATALYST INSTALLATION"> below and it will walk you
99though the setup of a fully functional Catalyst environment. If you
100would prefer to install directly from CPAN, you can download the example
3533daff 101program and all the necessary dependencies to your local machine by
444d6b27 102installing the C<Task::Catalyst::Tutorial> distribution:
d442cc9f 103
104 cpan Task::Catalyst::Tutorial
105
106This will also test to make sure the dependencies are working. If you
107have trouble installing these, please ask for help on the #catalyst
108IRC channel, or the Catalyst mailing list.
109
3533daff 110Subjects covered by the tutorial include:
d442cc9f 111
112=over 4
113
114=item *
115
116A simple application that lists and adds books.
117
118=item *
119
acbd7bdd 120The use of L<DBIx::Class|DBIx::Class> (DBIC) for the model (including
121some of the more advanced techniques you will probably want to use in
122your applications).
d442cc9f 123
124=item *
125
126How to write CRUD (Create, Read, Update, and Delete) operations in
127Catalyst.
128
129=item *
130
131Authentication ("auth").
132
133=item *
134
135Role-based authorization ("authz").
136
137=item *
138
418ded01 139Attempts to provide an example showing current (5.8XXX) Catalyst
d442cc9f 140practices. For example, the use of
141L<Catalyst::Action::RenderView|Catalyst::Action::RenderView>,
142DBIC, L<Catalyst::Plugin::ConfigLoader|Catalyst::Plugin::ConfigLoader>
45d511e0 143with C<myapp.conf>, the use of C<lib/MyApp/Controller/Root.pm>
d442cc9f 144vs. C<lib/MyApp.pm>, etc.
145
146=item *
147
1390ef0e 148The use of Template Toolkit (TT).
d442cc9f 149
150=item *
151
152Useful techniques for troubleshooting and debugging Catalyst
153applications.
154
155=item *
156
157The use of SQLite as a database (with code also provided for MySQL and
444d6b27 158PostgreSQL). (Note: Because we make use of the DBIx::Class Object
159Relational Mapping [ORM] layer, out our application will be database
160agnostic and can easily be used by any of the databases supported
161by DBIx::Class.)
d442cc9f 162
163=item *
164
1def4a20 165The use of L<HTML::FormFu|HTML::FormFu> for automated form processing
d442cc9f 166and validation.
167
168=back
169
170This tutorial makes the learning process its main priority. For
171example, the level of comments in the code found here would likely be
1def4a20 172considered excessive in a "normal project." Because of their contextual
d442cc9f 173value, this tutorial will generally favor inline comments over a
174separate discussion in the text. It also deliberately tries to
175demonstrate multiple approaches to various features (in general, you
176should try to be as consistent as possible with your own production
177code).
178
179Furthermore, this tutorial tries to minimize the number of controllers,
180models, TT templates, and database tables. Although this does result in
181things being a bit contrived at times, the concepts should be applicable
182to more complex environments. More complete and complicated example
183applications can be found in the C<examples> area of the Catalyst
184Subversion repository at
185L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/>.
186
1390ef0e 187
d442cc9f 188=head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL
189
190This tutorial was built using the following resources. Please note that
191you may need to make adjustments for different environments and
192versions:
193
194=over 4
195
196=item *
197
acbd7bdd 198Debian 5 (Lenny)
d442cc9f 199
200=item *
201
444d6b27 202Catalyst v5.80013
dd88c3b6 203
22a67212 204=item *
dd88c3b6 205
f34d7f62 206Catalyst::Devel v1.21
d442cc9f 207
208=item *
209
f34d7f62 210DBIx::Class v0.08112
d442cc9f 211
fce83e5f 212=item *
213
214Template Toolkit v2.20
215
d442cc9f 216=item *
217
218Catalyst Plugins
219
220The plugins used in this tutorial all have sufficiently stable APIs that
221you shouldn't need to worry about versions. However, there could be
222cases where the tutorial is affected by what version of plugins you
223use. This tutorial has been tested against the following set of plugins:
224
225=over 4
226
227=item *
228
f34d7f62 229Catalyst::Plugin::Authentication -- v0.10015
d442cc9f 230
231=item *
232
418ded01 233Catalyst::Plugin::Authorization::Roles -- v0.07
d442cc9f 234
235=item *
236
f34d7f62 237Catalyst::Plugin::ConfigLoader -- v0.27
d442cc9f 238
239=item *
240
f34d7f62 241Catalyst::Plugin::Session -- v0.29
d442cc9f 242
243=item *
244
f34d7f62 245Catalyst::Plugin::Session::State::Cookie -- v0.17
d442cc9f 246
247=item *
248
f34d7f62 249Catalyst::Plugin::Session::Store::FastMmap -- v0.13
d442cc9f 250
251=item *
252
f34d7f62 253Catalyst::Plugin::StackTrace -- v0.11
d442cc9f 254
255=item *
256
f34d7f62 257Catalyst::Plugin::Static::Simple -- v0.25
d442cc9f 258
259=back
260
261=item *
262
865d3efb 263B<NOTE:> You can check the versions you have installed with the
264following command:
265
896ec184 266 perl -M<_mod_name_> -e '"print $<_mod_name_>::VERSION\n"'
865d3efb 267
268For example:
865d3efb 269
444d6b27 270 perl -MCatalyst -e 'print "$Catalyst::VERSION\n";'
271
272or:
273
274 perl -MCatalyst::Devel -e 'print "$Catalyst::Devel::VERSION\n";'
d442cc9f 275
276=item *
277
444d6b27 278This tutorial will assume that the web browser is located on the same
279system where the Catalyst development server is running, and
280therefore use a URL of C<http://localhost:3000> (the Catalyst
281development server defaults to port 3000). If you are running Perl on
282a different box than where your web browser is located (or using a
283different port number via the C<-p> I<port_number> option to the
284development server), then you will need to update the URL you use
285accordingly.
286
287Please Note: Depending on the web browser you are using, you might
288need to hit C<Shift+Reload> or C<Ctrl+Reload> to pull a fresh page
289when testing your application at various points (see
290L<http://en.wikipedia.org/wiki/Bypass_your_cache> for a comprehensive
1390ef0e 291list of options for each browser). Also, the C<-k> keepalive option
292to the development server can be necessary with some browsers
293(especially Internet Explorer).
d442cc9f 294
295=back
296
1390ef0e 297
d442cc9f 298=head1 CATALYST INSTALLATION
299
acbd7bdd 300Although Catalyst installation has been a challenge in the past, the
301good news is that there are a growing number of options to eliminate
302(or at least dramatically simplify) this concern. Although a
303compelling strength of Catalyst is that it makes use of many of the
304modules in the vast repository that is CPAN, this can complicate the
305installation process if you approach it in the wrong way. Consider
306the following suggestions on the most common ways to get started with
307a Catalyst development environment:
1def4a20 308
309=over 4
310
311=item *
312
acbd7bdd 313Debian
314
315The Debian 5 live CD represents a great way for newcomers to
316experiment with Catalyst. As a "live CD," you can simple boot from
317the CD, run a few commands, and in a matter of minutes you should have
318a fully function environment in which do this tutorial. B<The tutorial
319was fully tested to work under Debian 5. Although it SHOULD work
320under any Catalyst installation method you might choose, it can be
321hard to guarantee this.>
322
323=over 4
324
325=item *
326
327Download one of the ISO files from
328L<http://cdimage.debian.org/cdimage/release/current-live/i386/iso-cd/>.
329You can pick any one of the live CD variations will work, but
330you may wish to consider the following points:
331
332=over 4
333
334=item *
335
336"C<debian-live-500-i386-rescue.iso>" is probably the best all-around
337option for most people because it includes many extra tools such as
338the GCC compiler, therefore saving RAM (every package you need to
339install when running from live CD consumes memory because RAM disk is
340being used in lieu of real disk space). When initially booting under
341this image, you may see some cryptic warning messages having to do
342with various diagnostic tools it tries to load or enable, but you
343should be able to safely ignore these.
344
345=item *
346
347"C<debian-live-500-i386-standard.iso>" is a great option because of
348its compact size, but you will probably need approximately 1 GB of RAM
349in the computer where you will run the tutorial. Because the
350"standard" live CD comes with with a minimal set of tools, we will
351have to install extra packages (such as the GCC compiler), all of
352which will require RAM when running from a live CD.
353
354=item *
355
356The other ISO images include different flavors of X-Windows desktop
357managers. You can select one of these if you don't mind the larger
358download size and prefer a graphical environment. Be aware that these
359disks do not come with the extra tools found on the "rescue" image, so
360you will need adequate RAM to be able to install them just as you
361would under the "standard" image. B<Use one of the "graphical" ISO
362images if you want a graphical web browser on the same machine as
363where you will run the tutorial.> (If you are using one of the non-
364graphical images discussed above, you can still use a graphical web
365browser from another machine and point it to your Catalyst development
366machine.)
367
368=back
369
370=item *
371
372Boot off the CD.
373
374=item *
375
376Select "C<Live>" from the initial boot menu.
377
378=item *
379
380Once the system has booted to a "C<user@debian:~$>" prompt, enter the
381following command to add the more current "unstable" package
382repository:
383
384 sudo vi /etc/apt/sources.list
385
386Add the following line to the bottom of this file:
387
388 deb http://ftp.us.debian.org/debian/ unstable main
389
390If you are not familiar with VI, you can move to the bottom of this
391file and press the "o" key to insert a new line and type the line
392above. Then press the "Esc" key followed by a colon (":"), the
393letters "wq" and then the "Enter" key. The rest of the tutorial will
394assume that you know how to use some editor that is available from the
395Linux command-line environment.
396
397=item *
398
399Install Catalyst:
400
401 sudo aptitude update
402 sudo aptitude -y install sqlite3 libdbd-sqlite3-perl libcatalyst-perl \
444d6b27 403 libcatalyst-modules-perl libdbix-class-timestamp-perl \
404 libdbix-class-encodedcolumn-perl libperl6-junction-perl \
f34d7f62 405 libdatetime-format-sqlite-perl libconfig-general-perl
444d6b27 406
407Let it install (normally about a 30 to 90-second operaton) and you are
408done. (Note the '\' above. Depending on your environment, you might
409be able to cut and paste the text as shown or need to remove the '\'
fce83e5f 410characters to that the command is all on a single line.)
acbd7bdd 411
412If you are using an image other than the "rescue" ISO, you will also need
413to run the following command to install additional packages:
414
415 sudo aptitude -y install gcc make libc6-dev
416
417If you are running from the Live CD, you probably also want to free up
418some RAM disk space with the following:
419
420 sudo aptitude clean
421
422NOTE: While the instructions above mention the Live CD because that
423makes it easy for people new to Linux, you can obviously pick a
424different Debian ISO image and install it to your hard drive.
425Although there are many different ways to download and install Debian,
426the "netinst" ISO image (such as "C<debian-500-i386-netinst.iso>"
427represents a great option because it keeps your initial download small
428(but still let's you install anything you want "over the network").
429
430Here are some tips if you are running from a live CD and are running
431out of disk space (which really means you are running out of RAM):
432
433=over 4
434
435=item *
436
437Always run "C<aptitude clean>" after you install new packages to
438delete the original .deb files (the files installed B<by> the .deb
439package B<will> remain available, just the .deb package itself is
440deleted).
441
442=item *
443
444If you are installing modules from CPAN, you can free up some space
444d6b27 445with "C<rm -rf /root/.cpan/*>" (change "/root/" in the previous
446command to match your home directory or the location where CPAN
447has been configured to perform build operations).
acbd7bdd 448
449=item *
450
451If necessary, you can remove the cached package information with the
452command "C<rm -f /var/lib/apt/lists/*>". You can later pull this
453information again via the command "C<aptitude update>".
454
455=item *
456
457You can save a small amount of space by commenting out the lines in
458C</etc/apt/sources.list> that reference "deb-src" and
459"security.debian.org". If you have already done an "C<aptitude
460update>" with these repositories enabled, you can use the tip in the
461previous bullet to free the space up (and then do another "C<aptitude
462update>").
463
464=item *
465
466Although you can free up space by removing packages you installed
467since you last booted (check out "C<aptitude remove _pkg_name>"),
468don't bother trying to remove packages already available at the time
469of boot. Instead of freeing up space, it will actual I<consume> some
470space. (The live CD uses these "burn in" packages right from the CD
471disk vs. first loading them on the virtual RAM disk. However, if you
472remove them, the system has to update various files, something that
473I<does> consume some space on the virtual RAM disk.)
474
475=back
476
477=back
478
479=item *
480
1def4a20 481Ubuntu
482
acbd7bdd 483Ubuntu is an extremely popular offshoot of Debian. It provides
484cutting edge versions of many common tools, application and libraries
485in an easy-to-run live CD configuration (and because a single download
486option can be used for both live CD and install-to-disk usage, it
487keeps your download options nice and simple). As with Debian 5, you
488should be able to generate a fully function Catalyst environment in a
489matter of minutes. Here are quick instructions on how to use Ubuntu
490to prepare for the tutorial:
d442cc9f 491
492=over 4
493
494=item *
495
acbd7bdd 496Download the Ubuntu Desktop edition and boot from the CD and/or image
497file, select your language, and then "Try Ubuntu without any changes
498to your computer."
1def4a20 499
500=item *
501
3533daff 502Open a terminal session (click "Applications" in the upper-left
503corner, then "Accessories," then "Terminal").
1def4a20 504
505=item *
506
507Add the 'universe' repositories:
508
3533daff 509 sudo gedit /etc/apt/sources.list
1def4a20 510
511And remove the comments from the lines under the comments about the
512'universe' repositories.
513
514=item *
515
516Install Catalyst:
517
acbd7bdd 518 sudo aptitude update
519 sudo aptitude install libdbd-sqlite3-perl libcatalyst-perl libcatalyst-modules-perl libconfig-general-perl
1def4a20 520
2b75577c 521Accept all of the dependencies. Done.
522
523If you are running from the Live CD, you probably also want to free up
524some disk space with the following:
525
acbd7bdd 526 sudo aptitude clean
2b75577c 527
acbd7bdd 528NOTE: While the instructions above mention the live CD because that
2b75577c 529makes it easy for people new to Linux, you can obviously also use one
530of the options to install Ubuntu on your drive.
3533daff 531
1def4a20 532=back
533
534=item *
535
d442cc9f 536Matt Trout's C<cat-install>
537
1ee1c3c3 538Available at L<http://www.shadowcat.co.uk/static/cat-install>,
ffeb7448 539C<cat-install> can be a fairly painless way to get Catalyst up and
540running. Just download the script from the link above and type C<perl
541cat-install>. Depending on the speed of your Internet connection and
542your computer, it will probably take 30 to 60 minutes to install because
543it downloads, makes, compiles, and tests every module. But this is an
544excellent way to automate the installation of all the latest modules
545used by Catalyst from CPAN.
546
d442cc9f 547
548=item *
549
ffeb7448 550Other Possibilities
551
552=over 4
553
554=item *
555
556OpenBSD Packages
557
558The 2008 Advent Day 4 entry has more information on using OpenBSD
559packages to quickly build a system:
560L<http://www.catalystframework.org/calendar/2008/4>.
561
562=item *
d442cc9f 563
ffeb7448 564NetBSD Package Collection on Solaris
565
566The 2008 Advent Day 15 entry has more information on using C<pkgsrc> and
567NetBSD packages on Solaris:
1435672d 568L<http://www.catalystframework.org/calendar/2008/15>.
d442cc9f 569
570=item *
571
ffeb7448 572CatInABox
573
574You can get more information at
575L<http://www.catalystframework.org/calendar/2008/7>
576or L<Perl::Dist::CatInABox|Perl::Dist::CatInABox>.
577
0c51850e 578=item *
579
580Frank Speiser's Amazon EC2 Catalyst SDK
581
582There are currently two flavors of publicly available Amazon Machine
583Images (AMI) that include all the elements you'd need to begin
584developing in a fully functional Catalyst environment within minutes.
585See L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>
586for more details.
587
d442cc9f 588=back
589
ffeb7448 590=back
591
d442cc9f 592For additional information and recommendations on Catalyst installation,
593please refer to
594L<Catalyst::Manual::Installation|Catalyst::Manual::Installation>.
595
1390ef0e 596
d442cc9f 597=head1 DATABASES
598
599This tutorial will primarily focus on SQLite because of its simplicity
600of installation and use; however, modifications in the script required
acbd7bdd 601to support MySQL and PostgreSQL will be presented in Appendix.
d442cc9f 602
603B<Note:> One of the advantages of the MVC design patterns is that
604applications become much more database independent. As such, you will
605notice that only the C<.sql> files used to initialize the database
606change between database systems: the Catalyst code generally remains the
607same.
608
1390ef0e 609
d442cc9f 610=head1 WHERE TO GET WORKING CODE
611
4b4d3884 612Each chapter of the tutorial has complete code available as a tarball in
028b4e1a 613the main Catalyst Subversion repository (see the note at the beginning
614of each part for the appropriate svn command to use).
d442cc9f 615
4b4d3884 616B<NOTE:> You can run the test cases for the final code through Chapter 8
028b4e1a 617with the following commands:
d442cc9f 618
4b4d3884 619 wget http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/MyApp_Chapter8.tgz
620 tar zxvf MyApp_Chapter8.tgz
d442cc9f 621 cd MyApp
a46b474e 622 CATALYST_DEBUG=0 prove --lib lib t
d442cc9f 623
acbd7bdd 624If you wish to include the L<HTML::FormFu|HTML::FormFu> section in
4b4d3884 625your tests, substitute C<MyApp_Chapter9_FormFu.tgz> for
444d6b27 626C<MyApp_Chapter8.tgz> in the URL above.
acbd7bdd 627
444d6b27 628 wget http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/MyApp_Chapter9_FormFu.tgz
629 tar zxvf MyApp_Chapter8.tgz
630 cd MyApp
631 CATALYST_DEBUG=0 prove --lib lib t
acbd7bdd 632
633You can also fire up the application under the development server that is conveniently
634built in to Catalyst. Just issue this command from the C<MyApp> directory where you
635ran the test suite above:
636
637 script/myapp_server.pl
638
639And the application will start. You can try out the application by
640pulling up C<http://localhost:3000> in your web browser (as mentioned
641earlier, change C<localhost> to a different IP address or DNS name if
642you are running your web browser and your Catalyst development on
643different boxes). We will obviously see more about how to use the
4b4d3884 644application as we go through the remaining chapters of the tutorial, but
acbd7bdd 645for now you can log in using the username "test01" and a password of
646"mypass".
647
d442cc9f 648
649=head1 AUTHOR
650
651Kennedy Clark, C<hkclark@gmail.com>
652
653Please report any errors, issues or suggestions to the author. The
654most recent version of the Catalyst Tutorial can be found at
59884771 655L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
d442cc9f 656
45c7830f 657Copyright 2006-2008, Kennedy Clark, under Creative Commons License
865d3efb 658(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).