Release commit for 5.9013
[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
232da04a 59This tutorial provides a multi-part introduction to the Catalyst Web
60Framework. It seeks to provide a rapid overview of many of its most
d442cc9f 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
8168726b 67authentication and authorization to an existing application, and/or
68form management).
d442cc9f 69
232da04a 70The most recent code for the tutorial is included on the Tutorial Virtual
71Machine you can download from:
d442cc9f 72
014065cb 73L<http://cattut.shadowcat.co.uk/>
74
75See L</STARTING WITH THE TUTORIAL VIRTUAL MACHINE> below for
76instructions getting and using the VM.
77
78Should you wish to download the code directly, you get pull it via the
79following command (note: will probably be switching to git soon):
80
028b4e1a 81 svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/ CatalystTutorial
d442cc9f 82
75b13da6 83This will download the most recent code for each chapter of the
84tutorial into the CatalystTutorial directory on your machine.
d442cc9f 85
81a33ef3 86These reference implementations are provided so that when you follow
232da04a 87the tutorial, you can use the code to ensure that your system is set up
88correctly (which shouldn't be an issue if you use the Tutorial Virtual
89Machine), :-) and that you have not inadvertently made any typographic
81a33ef3 90errors, or accidentally skipped part of the tutorial.
3d9ae335 91
8168726b 92B<NOTE: You can use any Perl-supported OS and environment to run
93Catalyst.> It should make little or no difference to Catalyst's
232da04a 94operation, B<but this tutorial has been written using the Debian-based
81a33ef3 95Tutorial Virtual Machine> that you can download and use to work through
232da04a 96the full tutorial step by step. B<WE STRONGLY RECOMMEND THAT YOU USE
97THE VIRTUAL MACHINE IMAGE TO WORK THROUGH THE TUTORIAL> to avoid issues
98that may crop up if you are working with a different configuration. We
99have tested the Tutorial Virtual Machine to make sure all of the
100examples work correctly, but it is hard to guarantee this on other
101platforms and versions.
102
103If you would prefer to install directly from CPAN and not use the
104Tutorial Virtual machine, you can download the example program and all
105the necessary dependencies to your local machine by installing the
cacb3819 106L<Task::Catalyst::Tutorial> distribution:
d442cc9f 107
108 cpan Task::Catalyst::Tutorial
109
110This will also test to make sure the dependencies are working. If you
111have trouble installing these, please ask for help on the #catalyst
112IRC channel, or the Catalyst mailing list.
113
3533daff 114Subjects covered by the tutorial include:
d442cc9f 115
116=over 4
117
7ce05098 118=item *
d442cc9f 119
120A simple application that lists and adds books.
121
122=item *
123
2217b252 124The use of L<DBIx::Class> (DBIC) for the model (including
8168726b 125some of the more advanced techniques you will probably want to use in
acbd7bdd 126your applications).
d442cc9f 127
7ce05098 128=item *
d442cc9f 129
130How to write CRUD (Create, Read, Update, and Delete) operations in
131Catalyst.
132
133=item *
134
135Authentication ("auth").
136
7ce05098 137=item *
d442cc9f 138
139Role-based authorization ("authz").
140
7ce05098 141=item *
d442cc9f 142
8168726b 143Attempts to provide an example showing current (5.9) Catalyst
144practices.
d442cc9f 145
7ce05098 146=item *
d442cc9f 147
1390ef0e 148The use of Template Toolkit (TT).
d442cc9f 149
7ce05098 150=item *
d442cc9f 151
152Useful techniques for troubleshooting and debugging Catalyst
153applications.
154
7ce05098 155=item *
d442cc9f 156
157The use of SQLite as a database (with code also provided for MySQL and
8168726b 158PostgreSQL). (Note: Because we make use of the DBIx::Class Object
444d6b27 159Relational Mapping [ORM] layer, out our application will be database
8168726b 160agnostic and can easily be used by any of the databases supported by
161DBIx::Class.)
d442cc9f 162
7ce05098 163=item *
d442cc9f 164
2217b252 165The use of L<HTML::FormFu> or L<HTML::FormHandler>
0abc72ed 166for automated form processing and validation.
d442cc9f 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
232da04a 183applications can be found at
184L<http://wiki.catalystframework.org/wiki/resources/catalystexamples> and
185in the C<examples> area of the Catalyst Subversion repository at
d442cc9f 186L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/>.
1390ef0e 187
2e73e2be 188
232da04a 189=head1 STARTING WITH THE TUTORIAL VIRTUAL MACHINE
2e73e2be 190
ec5b24b2 191The steps below briefly outline how you can download the Tutorial
192Virtual Machine. This document uses the term "host machine" to refer to
193the physical machine where you will run the virtualization software and
194boot up the VM. The terms "guest machine" or just "VM" refer to the
195virtual machine itself -- the thing where you actually do the tutorial
f0deaac8 196(and that you boot up on the "host machine").
689db796 197
198B<Note:> Throughout the tutorial, we will shows the UNIX shell prompt as
199"C<$>". If you are using the Tutorial VM, the prompt will really be
200"C<catalyst@catalyst:~$>" (where "C<~"> will change to show your
201current directory), but we will keep it short and just use "C<$>".
ec5b24b2 202
203
2e73e2be 204=over 4
205
7ce05098 206=item 1
2e73e2be 207
014065cb 208Download a Tutorial Virtual Machine image from
209L<http://cattut.shadowcat.co.uk/>
210
81a33ef3 211B<A big thanks to Shadowcat Systems for hosting the virtual machines>
212B<(and everything else they do for the Perl community)!>
2e73e2be 213
214=item 2
215
9be506a8 216Uncompress the image on the "host machine":
232da04a 217
9be506a8 218 MAINCOMPUTER:~$ tar zxvf CatalystTutorial.tgz
2e73e2be 219
220=item 3
221
232da04a 222Boot the virtual machine using a tool like VMWare Player
56a12748 223L<https://www.vmware.com/products/workstation-player.html> or VirtualBox
224L<https://www.virtualbox.org/>.
2e73e2be 225
226=item 4
227
477a6d5b 228Once you get a login prompt, enter the username B<catalyst> and a
229password for C<catalyst>. You should now be at a prompt that looks
230like:
2e73e2be 231
477a6d5b 232 catalyst login: catalyst
3f97ca7b 233 Password: catalyst
234 ...
689db796 235 catalyst@catalyst:~$
2e73e2be 236
237=item 5
238
232da04a 239Type "C<ifconfig>" to get the IP address assigned to the virtual
240machine. You should get output along the lines of:
2e73e2be 241
232da04a 242 eth0 Link encap:Ethernet HWaddr 00:01:22:3b:45:69
ec5b24b2 243 inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
2e73e2be 244 ...
245
232da04a 246You want the IP address on the second line below the C<eth0> interface.
cd13ab36 247The image is designed to automatically use a DHCP-assigned address.
232da04a 248
232da04a 249
ec5b24b2 250Try to ping this IP address from your "host machine" (main desktop):
2e73e2be 251
2e73e2be 252
9be506a8 253 MAINCOMPUTER:~$ ping 192.168.0.12
ec5b24b2 254 PING 192.168.0.12 (192.168.0.12) 56(84) bytes of data.
255 64 bytes from 192.168.0.12: icmp_req=1 ttl=255 time=4.97 ms
256 64 bytes from 192.168.0.12: icmp_req=2 ttl=255 time=3.43 ms
257 ...
2e73e2be 258
2e73e2be 259
ec5b24b2 260B<Note:> The ping above is being originated B<from> your B<host machine>
261(main desktop) and going B<to> your guest B<virtual machine>, not the
262other way around.
263
264If you are not seeing a valid IP address or it's not responding to pings
265(for example, you get error messages along the lines of "Request timed
266out", "100% packet loss", or "Destination Host Unreachable"), there
267could be a few network-related issues you might need to sort out. See
014065cb 268the section below L</Sorting Out Virtual Machine Network-Related Issues>
ec5b24b2 269for additional information and troubleshooting advice.
270
81a33ef3 271B<Note:> Remember this IP address... you will be using it throughout the
ec5b24b2 272tutorial.
273
232da04a 274
275=item 6
276
ec5b24b2 277B<From your main desktop machine>, open an SSH client and connect to the
278IP address found in the previous step. You should get a login prompt
279(accept the SSH key if you get a warning message about that). Login
477a6d5b 280with the same username and password as we used in Step 4: B<catalyst> /
ec5b24b2 281B<catalyst>
282
d1598ab8 283 catalyst login: catalyst
ec5b24b2 284 Password: catalyst
285 ...
689db796 286 catalyst@catalyst:~$
ec5b24b2 287
2e73e2be 288
289=item 7
290
232da04a 291B<Using the SSH session>, change to the sample code directory for
292Chapter 3 included with the Tutorial Virtual Machine and start the
293Catalyst Development Server:
2e73e2be 294
ec5b24b2 295 $ cd Final/Chapter03/MyApp
8835e16b 296 $ perl script/myapp_server.pl
2e73e2be 297
298=item 8
299
ec5b24b2 300B<From your main desktop machine> (the "host machine"), open a web
301browser and go to B<http://A.B.C.D:3000/>, where C<A.B.C.D> is the IP
302address to your virtual machine that you looked up in Step 5. For
303example, if your virtual machine is using the IP address
304C<192.168.0.12>, you would put the following URL into your web browser:
232da04a 305
ec5b24b2 306 http://192.168.0.12:3000/
232da04a 307
308Make sure you don't forget the B<:3000> to use port 3000 instead of the
309usual port 80 that is used by HTTP by default.
2e73e2be 310
232da04a 311You should get a Catalyst Welcome Screen. If you do, feel free to jump
312right in to L<Chapter 2|Catalyst::Manual::Tutorial::02_CatalystBasics>
313of the tutorial. If you don't go get the Catalyst Welcome Screen, go
314back and carefully check each of the steps above.
315
316=item 9
317
46b6662a 318B<Optional:> Also, to reduce download size, the Tutorial VM just
319includes a minimal command-line environment. You are free to use
320Debian's very capable C<apt> package manager to install other packages.
321You will first want to pull the apt cache files with C<aptitude update>
322(or C<apt-get update> if you prefer apt-get).
323
324The VI/VIM editor is already installed on the Tutorial Virtual Machine.
325In order to reduce the size of the download, Emacs is not pre-installed.
326Since people obviously have very strong opinions about which editor is
327best, :-) fortunately it's very easy to install Emacs:
328
d1598ab8 329 $ sudo aptitude update
330 $ sudo aptitude install emacs
2e73e2be 331
46b6662a 332In general, it is expected that people will
333boot up the Tutorial VM on their main desktop (the "host machine" using
334the terminology above) and then use that main desktop machine to SSH and
335web browse into the "guest VM" as they work through the tutorial. If
336you wish to install X Windows (or any other packages), just use the
09627be4 337C<aptitude> (or C<apt-get>) Debian commands.
338
339For example, to install X Windows with Fluxbox (a lightweight
340WindowManager -- it is great for things like this tutorial since it's
341about 1/10th the size of other common X Windows environments), you can
342do:
46b6662a 343
d1598ab8 344 $ sudo aptitude update
09627be4 345 $ sudo aptitude install xorg fluxbox iceweasel
346
347And then start X Windows from the B<VM Console> with this command:
348
349 $ startx
350
351Note that if you want to start Fluxbox from an SSH session, you can use
352the C<sudo dpkg-reconfigure x11-common> and select "anybody" from the
353menu. Otherwise, you will need to be on the actual "VM console" to
354start it.
46b6662a 355
09627be4 356If you have a preference for the Gnome desktop environment, you can do:
46b6662a 357
d1598ab8 358 $ sudo aptitude update
083e20bd 359 $ sudo aptitude install gnome iceweasel
09627be4 360 $
361 $ # You can reboot or start with 'startx', we will just reboot here
362 $ reboot
363
8c454636 364For KDE, just substitute the package name "C<kde>" for "C<gnome>" above.
46b6662a 365
11bd7647 366 $ sudo aptitude install kde iceweasel
367
09627be4 368Note that C<iceweasel> is basically used to install Firefox on Debian
369boxes. You can start it under X Windows with either the C<firefox>
370command or the C<iceweasel> command (or use the menus). You can get
56a12748 371more information on Iceweasel at L<https://wiki.debian.org/Iceweasel>.
09627be4 372
373Also, you might need to add more memory to your virtual machine if you
374want to run X Windows (or other tools that might require additional
3df63254 375memory). Consult the documentation of your virtualization software
09627be4 376for instructions on how to do this (it's usually pretty simple).
46b6662a 377
378
2e73e2be 379=back
380
381
ec5b24b2 382You may note that the Tutorial Virtual Machine uses L<local::lib> so
477a6d5b 383that the Perl modules are run from ~/perl5 (in this case,
384/home/catalyst/perl5) vs. the usual location of your "system Perl". We
385recommend that you also consider using this very handy module. It can
386greatly ease the process of maintaining and testing different
387combinations or Perl modules across development, staging, and production
3df63254 388servers. (The "relocatable Perl" feature can also be used to run
477a6d5b 389both the modules B<and> Perl itself from your home directory [or any
390other directory you chose]).
e684d796 391
d35624c1 392B<Note>: Please provide feedback on how the Virtual Machine approach for
393the tutorial works for you. If you have suggestions or comments, you
394can reach the author through the email address at the bottom of this
395page or via an RT ticket at
396L<https://rt.cpan.org/Public/Dist/Display.html?Name=Catalyst-Manual>.
397
398
e684d796 399
ec5b24b2 400=head2 Sorting Out Virtual Machine Network-Related Issues
401
402In general, using a virtual machine to work through the tutorial is
403*much* easier than trying to do it in other environments, especially if
404you are new to Catalyst (or Perl or CPAN or ...). However, it's
405possible that you could run into a few network-related issues. The good
406news is that there is lots of information about the issue available via
407search engines on the Internet. Here is some background information to
408get you started.
409
410In Step 5 of the prior section above, we assumed that a "Bridged Mode"
411configuration and DHCP will work (it should for most people). If DHCP
412is not working or is not available in your location, most virtual
413machine "host" environments let you select between one of several
414different types of networking between the "guest" and the "host"
415machine.
416
417 1) Bridged
418 2) NAT
419 3) Local host only
420
421The Tutorial Virtual Machine defaults to "Bridged" -- this should result
422in the VM acting like another device on your network that will get a
423different DHCP IP address than the host machine. The advantage of this
424approach, is that you can easily SSH and web browse to the guest virtual
425machine. In general, this is the best option if you want to be able to
426boot up the VM and then use your SSH client and web browser from your
427main machine to connect into the virtual machine.
428
429In some environments, you might have better luck with "NAT" (Network
430Address Translation) mode. With this configuration, the guest VM shares
431the same IP address as the host machine. The downside of this approach
432is that special configuration is required if you want to be able to SSH
433or web browse to the guest VM. The NAT option should automatically
434allow the VM "outbound connection" (e.g., to the Internet if you want to
435install additional Debian packages), but it requires special
436configuration if you want to get "inbound connections" that go from some
437other machine (including the "host machine") into the VM. Some virtual
438machine host environments let you configure a "static NAT" or "port
439forwarding" to reach the guest OS, but others omit this functionality.
440
09627be4 441Note: NAT mode can work fine if you install X Windows and do the whole
442tutorial locally on the actual VM vs. using SSH and a web browser from
443your host machine.
444
ec5b24b2 445"Local host only" mode let's the guest VM and the host machine talk on a
446"private subnet" that other devices in your network cannot reach. This
447can work as long as you don't need to go from the VM to the Internet
448(for example, to install other Debian packages).
449
09627be4 450
ec5b24b2 451Consult the documentation on your virtual machine host environment for
452help configuring the options above. Here are some links that might
453help:
454
455=over 4
456
457=item *
458
56a12748 459L<https://web.archive.org/web/20160623183717/http://vmfaq.com/index.php?View=entry&EntryID=34>
ec5b24b2 460
461=item *
462
56a12748 463L<https://www.vmware.com/support/pubs/player_pubs.html>
ec5b24b2 464
465=item *
466
56a12748 467L<https://www.virtualbox.org/manual/ch06.html>
ec5b24b2 468
469=back
470
471
472
473
d442cc9f 474=head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL
475
476This tutorial was built using the following resources. Please note that
a6b4cff5 477you may need to make adjustments for different environments and versions
478(note that trailing zeros in version numbers are not significant and may
479get dropped with some techniques for viewing them; for example, Catalyst
480v5.80020 might show up as 5.8002):
d442cc9f 481
482=over 4
483
7ce05098 484=item *
d442cc9f 485
95968b61 486Debian 6 (Squeeze)
d442cc9f 487
7ce05098 488=item *
d442cc9f 489
232da04a 490Catalyst v5.90002
dd88c3b6 491
22a67212 492=item *
dd88c3b6 493
232da04a 494Catalyst::Devel v1.34
d442cc9f 495
7ce05098 496=item *
d442cc9f 497
232da04a 498DBIx::Class v0.08195
d442cc9f 499
fce83e5f 500=item *
501
232da04a 502Catalyst::Model::DBIC::Schema v0.54
2e73e2be 503
504=item *
505
95968b61 506Template Toolkit v2.22
fce83e5f 507
2e73e2be 508
d442cc9f 509=item *
510
232da04a 511HTML::FormFu -- v0.09004
2e73e2be 512
7ce05098 513=item *
d442cc9f 514
865d3efb 515B<NOTE:> You can check the versions you have installed with the
95968b61 516following command (note the slash before the space):
517
518 perl -M<_mod_name_>\ 999
519
520or:
865d3efb 521
f63a9a2b 522 perl -M<_mod_name_> -e 'print "$<_mod_name_>::VERSION\n"'
865d3efb 523
524For example:
865d3efb 525
95968b61 526 perl -MCatalyst::Devel\ 999
444d6b27 527
528or:
529
530 perl -MCatalyst::Devel -e 'print "$Catalyst::Devel::VERSION\n";'
d442cc9f 531
7ce05098 532=item *
d442cc9f 533
232da04a 534This tutorial will show URLs in the format of C<http://localhost:3000>,
535but if you are running your web browser from outside the Tutorial
536Virtual Machine, you will want to substitute the IP address of your VM
537for the C<localhost> in the URLs (again, you can get the IP address for
538eth0 from the C<ifconfig> command). For example, if your VM has an
ec5b24b2 539IP address of 192.168.0.12, you will want to use a base URL of
540C<http://192.168.0.12:3000>. Note that the development server
5336f546 541defaults to port 3000 (you can change with the "-p" option on the
542command line).
232da04a 543
d3b61552 544B<Please Note:> Depending on the web browser you are using, you might
545need to hit C<Shift+Reload> or C<Ctrl+Reload> to pull a fresh page when
8168726b 546testing your application at various points (see
56a12748 547L<https://en.wikipedia.org/wiki/Wikipedia:Bypass_your_cache> for a
d3b61552 548comprehensive list of options for each browser).
549
550Also, the C<-k> B<keepalive option> to the development server can be
551necessary with some browsers (B<especially Internet Explorer>).
0c51850e 552
d442cc9f 553=back
554
1390ef0e 555
d442cc9f 556=head1 DATABASES
557
558This tutorial will primarily focus on SQLite because of its simplicity
559of installation and use; however, modifications in the script required
a6b4cff5 560to support MySQL and PostgreSQL will be presented in the Appendix.
d442cc9f 561
a6b4cff5 562B<Note:> One of the advantages of using tools like Catalyst and DBIC is
563that applications become much more database independent. As such, you
564will notice that only the C<.sql> files used to initialize the database
565change between database systems: most of the code generally remains the
d442cc9f 566same.
567
1390ef0e 568
24acc5d7 569You can jump to the next chapter of the tutorial here:
570L<Catalyst Basics|Catalyst::Manual::Tutorial::02_CatalystBasics>
571
572
d442cc9f 573=head1 AUTHOR
574
575Kennedy Clark, C<hkclark@gmail.com>
576
bb0999d3 577Feel free to contact the author for any errors or suggestions, but the
578best way to report issues is via the CPAN RT Bug system at
579L<https://rt.cpan.org/Public/Dist/Display.html?Name=Catalyst-Manual>.
d442cc9f 580
bb0999d3 581Copyright 2006-2011, Kennedy Clark, under the
ec3ef4ad 582Creative Commons Attribution Share-Alike License Version 3.0
56a12748 583(L<https://creativecommons.org/licenses/by-sa/3.0/us/>).