Add comment for RT #31164
[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
028b4e1a 73 svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/Tutorial/ CatalystTutorial
d442cc9f 74
75b13da6 75This will download the most recent code for each chapter of the
76tutorial into the CatalystTutorial directory on your machine.
d442cc9f 77
3d9ae335 78B<These reference implementations are provided so that when you follow
232da04a 79the tutorial, you can use the code to ensure that your system is set up
80correctly (which shouldn't be an issue if you use the Tutorial Virtual
81Machine), :-) and that you have not inadvertently made any typographic
82errors, or accidentally skipped part of the tutorial.>
3d9ae335 83
8168726b 84B<NOTE: You can use any Perl-supported OS and environment to run
85Catalyst.> It should make little or no difference to Catalyst's
232da04a 86operation, B<but this tutorial has been written using the Debian-based
87Tutorial Virtual Machine that you can download and use to work through
88the full tutorial step by step. B<WE STRONGLY RECOMMEND THAT YOU USE
89THE VIRTUAL MACHINE IMAGE TO WORK THROUGH THE TUTORIAL> to avoid issues
90that may crop up if you are working with a different configuration. We
91have tested the Tutorial Virtual Machine to make sure all of the
92examples work correctly, but it is hard to guarantee this on other
93platforms and versions.
94
95If you would prefer to install directly from CPAN and not use the
96Tutorial Virtual machine, you can download the example program and all
97the necessary dependencies to your local machine by installing the
98C<Task::Catalyst::Tutorial> distribution:
d442cc9f 99
100 cpan Task::Catalyst::Tutorial
101
102This will also test to make sure the dependencies are working. If you
103have trouble installing these, please ask for help on the #catalyst
104IRC channel, or the Catalyst mailing list.
105
3533daff 106Subjects covered by the tutorial include:
d442cc9f 107
108=over 4
109
110=item *
111
112A simple application that lists and adds books.
113
114=item *
115
2217b252 116The use of L<DBIx::Class> (DBIC) for the model (including
8168726b 117some of the more advanced techniques you will probably want to use in
acbd7bdd 118your applications).
d442cc9f 119
120=item *
121
122How to write CRUD (Create, Read, Update, and Delete) operations in
123Catalyst.
124
125=item *
126
127Authentication ("auth").
128
129=item *
130
131Role-based authorization ("authz").
132
133=item *
134
8168726b 135Attempts to provide an example showing current (5.9) Catalyst
136practices.
d442cc9f 137
138=item *
139
1390ef0e 140The use of Template Toolkit (TT).
d442cc9f 141
142=item *
143
144Useful techniques for troubleshooting and debugging Catalyst
145applications.
146
147=item *
148
149The use of SQLite as a database (with code also provided for MySQL and
8168726b 150PostgreSQL). (Note: Because we make use of the DBIx::Class Object
444d6b27 151Relational Mapping [ORM] layer, out our application will be database
8168726b 152agnostic and can easily be used by any of the databases supported by
153DBIx::Class.)
d442cc9f 154
155=item *
156
2217b252 157The use of L<HTML::FormFu> or L<HTML::FormHandler>
0abc72ed 158for automated form processing and validation.
d442cc9f 159
160=back
161
162This tutorial makes the learning process its main priority. For
163example, the level of comments in the code found here would likely be
1def4a20 164considered excessive in a "normal project." Because of their contextual
d442cc9f 165value, this tutorial will generally favor inline comments over a
166separate discussion in the text. It also deliberately tries to
167demonstrate multiple approaches to various features (in general, you
168should try to be as consistent as possible with your own production
169code).
170
171Furthermore, this tutorial tries to minimize the number of controllers,
172models, TT templates, and database tables. Although this does result in
173things being a bit contrived at times, the concepts should be applicable
174to more complex environments. More complete and complicated example
232da04a 175applications can be found at
176L<http://wiki.catalystframework.org/wiki/resources/catalystexamples> and
177in the C<examples> area of the Catalyst Subversion repository at
d442cc9f 178L<http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/>.
8168726b 179***Todo: update link above?
d442cc9f 180
1390ef0e 181
2e73e2be 182
232da04a 183=head1 STARTING WITH THE TUTORIAL VIRTUAL MACHINE
2e73e2be 184
2e73e2be 185=over 4
186
187=item 1
188
8168726b 189Download the C<debian-live-6.0.1-i386-rescue.iso> image from
190L<http://cdimage.debian.org/cdimage/release/current-live/i386/iso-hybrid/>.
2e73e2be 191
192=item 2
193
232da04a 194Uncompress the image:
195
196 tar zxvf CatalystTutorial.tgz
2e73e2be 197
198=item 3
199
232da04a 200Boot the virtual machine using a tool like VMWare Player
201L<http://www.vmware.com/products/player> or VirtualBox
202L<http://www.virtualbox.org/>.
2e73e2be 203
204=item 4
205
232da04a 206Once you get a login prompt, enter the username B<root> and a password
207for C<catalyst>. You should now be at a prompt that looks like:
2e73e2be 208
232da04a 209 login: root
210 password: catalyst
211 root@catalyst:~#
2e73e2be 212
213=item 5
214
232da04a 215Type "C<ifconfig>" to get the IP address assigned to the virtual
216machine. You should get output along the lines of:
2e73e2be 217
232da04a 218 eth0 Link encap:Ethernet HWaddr 00:01:22:3b:45:69
219 inet addr:192.168.245.128 Bcast:192.168.245.255 Mask:255.255.255.0
2e73e2be 220 ...
221
232da04a 222You want the IP address on the second line below the C<eth0> interface.
223The image it design to automatically use a DHCP-assigned address.
224
225If DHCP is not working or is not available in your location, most
226virtual machine "host" environments let's you select between one of
227several different types of networking between the "guest" and the "host"
228machine.
229
230 1) Bridged
231 2) NAT
232 3) Local host only
2e73e2be 233
232da04a 234The Tutorial Virtual Machine defaults to "Bridged" -- this should result
235in the VM acting like another device on your network that will get a
236different DHCP IP address than the host machine. The advantage of this
237approach, is that you can easily SSH and web browse to the guest virtual
238machine.
2e73e2be 239
232da04a 240In some environments, you might have better luck with "NAT" (Network
241Address Translation) mode. With this configuration, the guest VM shares
242the same IP address as the host machine. The downside of the approach
243is that special configuration is required if you want to be able to SSH
244or web browse to the guest VM (some virtual machine host environments
245let you configure a "static NAT" or "port forwarding" to reach the guest
246OS).
2e73e2be 247
232da04a 248"Local host only" mode let's the guest VM and the host machine talk on a
249"private subnet" that other devices in your network cannot reach.
2e73e2be 250
232da04a 251Consult the documentation on your virtual machine host environment for
252help configuring the options above.
253
254=item 6
255
256B<From your main desktop machine>, open an SSH client and connect to
257the IP address found in the previous step. You should get a login
258prompt (accept the SSH key). Login with the same username and password:
259B<root> / B<catalyst>
2e73e2be 260
261=item 7
262
232da04a 263B<Using the SSH session>, change to the sample code directory for
264Chapter 3 included with the Tutorial Virtual Machine and start the
265Catalyst Development Server:
2e73e2be 266
232da04a 267 $ cd Final/Chapter03
268 $ perl scripts/myapp_server -r
2e73e2be 269
270=item 8
271
232da04a 272B<From your main desktop machine>, open a web browser and go to
273B<http://A.B.C.D:3000/>, where C<A.B.C.D> is the IP address to your
274virtual machine that you looked up in Step 5. For example, if your
275virtual machine is using the IP address C<192.168.0.21>, you would put
276the following URL into your web browser:
277
278 http://192.168.0.21:3000/
279
280Make sure you don't forget the B<:3000> to use port 3000 instead of the
281usual port 80 that is used by HTTP by default.
2e73e2be 282
232da04a 283You should get a Catalyst Welcome Screen. If you do, feel free to jump
284right in to L<Chapter 2|Catalyst::Manual::Tutorial::02_CatalystBasics>
285of the tutorial. If you don't go get the Catalyst Welcome Screen, go
286back and carefully check each of the steps above.
287
288=item 9
289
290B<Optional:> The VI/VIM editor is already installed on the Tutorial
291Virtual Machine. In order to reduce the size of the download, Emacs is
292not pre-installed. Since people obviously have very strong opinions
293about which editor is best, :-) Debian fortunately make it very easy to
294install Emacs:
295
296 $ aptitude install emacs
2e73e2be 297
298=back
299
300
d442cc9f 301=head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL
302
303This tutorial was built using the following resources. Please note that
a6b4cff5 304you may need to make adjustments for different environments and versions
305(note that trailing zeros in version numbers are not significant and may
306get dropped with some techniques for viewing them; for example, Catalyst
307v5.80020 might show up as 5.8002):
d442cc9f 308
309=over 4
310
311=item *
312
95968b61 313Debian 6 (Squeeze)
d442cc9f 314
315=item *
316
232da04a 317Catalyst v5.90002
dd88c3b6 318
22a67212 319=item *
dd88c3b6 320
232da04a 321Catalyst::Devel v1.34
d442cc9f 322
323=item *
324
232da04a 325DBIx::Class v0.08195
d442cc9f 326
fce83e5f 327=item *
328
232da04a 329Catalyst::Model::DBIC::Schema v0.54
2e73e2be 330
331=item *
332
95968b61 333Template Toolkit v2.22
fce83e5f 334
2e73e2be 335
d442cc9f 336=item *
337
232da04a 338HTML::FormFu -- v0.09004
2e73e2be 339
d442cc9f 340=item *
341
865d3efb 342B<NOTE:> You can check the versions you have installed with the
95968b61 343following command (note the slash before the space):
344
345 perl -M<_mod_name_>\ 999
346
347or:
865d3efb 348
f63a9a2b 349 perl -M<_mod_name_> -e 'print "$<_mod_name_>::VERSION\n"'
865d3efb 350
351For example:
865d3efb 352
95968b61 353 perl -MCatalyst::Devel\ 999
444d6b27 354
355or:
356
357 perl -MCatalyst::Devel -e 'print "$Catalyst::Devel::VERSION\n";'
d442cc9f 358
359=item *
360
232da04a 361This tutorial will show URLs in the format of C<http://localhost:3000>,
362but if you are running your web browser from outside the Tutorial
363Virtual Machine, you will want to substitute the IP address of your VM
364for the C<localhost> in the URLs (again, you can get the IP address for
365eth0 from the C<ifconfig> command). For example, if your VM has an
366IP address of 192.168.245.128, you will want to use a base URL of
367C<http://192.168.245.128:3000>. Note that the development server
368defaults to port 3000 (you can change with with the "-p" option on the
369command line.
370
371B<Please Note:> Depending on the web browser you are using, you might need
8168726b 372to hit C<Shift+Reload> or C<Ctrl+Reload> to pull a fresh page when
373testing your application at various points (see
374L<http://en.wikipedia.org/wiki/Bypass_your_cache> for a comprehensive
375list of options for each browser). Also, the C<-k> keepalive option to
376the development server can be necessary with some browsers (especially
232da04a 377Internet Explorer).
0c51850e 378
d442cc9f 379=back
380
1390ef0e 381
d442cc9f 382=head1 DATABASES
383
384This tutorial will primarily focus on SQLite because of its simplicity
385of installation and use; however, modifications in the script required
a6b4cff5 386to support MySQL and PostgreSQL will be presented in the Appendix.
d442cc9f 387
a6b4cff5 388B<Note:> One of the advantages of using tools like Catalyst and DBIC is
389that applications become much more database independent. As such, you
390will notice that only the C<.sql> files used to initialize the database
391change between database systems: most of the code generally remains the
d442cc9f 392same.
393
1390ef0e 394
24acc5d7 395You can jump to the next chapter of the tutorial here:
396L<Catalyst Basics|Catalyst::Manual::Tutorial::02_CatalystBasics>
397
398
d442cc9f 399=head1 AUTHOR
400
401Kennedy Clark, C<hkclark@gmail.com>
402
8168726b 403Please report any errors, issues or suggestions to the author. The
404most recent version of the Catalyst Tutorial can be found at
59884771 405L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
d442cc9f 406
ec3ef4ad 407Copyright 2006-2010, Kennedy Clark, under the
408Creative Commons Attribution Share-Alike License Version 3.0
865d3efb 409(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).