Add comment about local::lib
[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
3f97ca7b 209 catalyst login: root
210 Password: catalyst
211 ...
232da04a 212 root@catalyst:~#
2e73e2be 213
214=item 5
215
232da04a 216Type "C<ifconfig>" to get the IP address assigned to the virtual
217machine. You should get output along the lines of:
2e73e2be 218
232da04a 219 eth0 Link encap:Ethernet HWaddr 00:01:22:3b:45:69
220 inet addr:192.168.245.128 Bcast:192.168.245.255 Mask:255.255.255.0
2e73e2be 221 ...
222
232da04a 223You want the IP address on the second line below the C<eth0> interface.
224The image it design to automatically use a DHCP-assigned address.
225
226If DHCP is not working or is not available in your location, most
227virtual machine "host" environments let's you select between one of
228several different types of networking between the "guest" and the "host"
229machine.
230
231 1) Bridged
232 2) NAT
233 3) Local host only
2e73e2be 234
232da04a 235The Tutorial Virtual Machine defaults to "Bridged" -- this should result
236in the VM acting like another device on your network that will get a
237different DHCP IP address than the host machine. The advantage of this
238approach, is that you can easily SSH and web browse to the guest virtual
239machine.
2e73e2be 240
232da04a 241In some environments, you might have better luck with "NAT" (Network
242Address Translation) mode. With this configuration, the guest VM shares
243the same IP address as the host machine. The downside of the approach
244is that special configuration is required if you want to be able to SSH
245or web browse to the guest VM (some virtual machine host environments
246let you configure a "static NAT" or "port forwarding" to reach the guest
247OS).
2e73e2be 248
232da04a 249"Local host only" mode let's the guest VM and the host machine talk on a
250"private subnet" that other devices in your network cannot reach.
2e73e2be 251
232da04a 252Consult the documentation on your virtual machine host environment for
253help configuring the options above.
254
255=item 6
256
257B<From your main desktop machine>, open an SSH client and connect to
258the IP address found in the previous step. You should get a login
259prompt (accept the SSH key). Login with the same username and password:
260B<root> / B<catalyst>
2e73e2be 261
262=item 7
263
232da04a 264B<Using the SSH session>, change to the sample code directory for
265Chapter 3 included with the Tutorial Virtual Machine and start the
266Catalyst Development Server:
2e73e2be 267
232da04a 268 $ cd Final/Chapter03
269 $ perl scripts/myapp_server -r
2e73e2be 270
271=item 8
272
232da04a 273B<From your main desktop machine>, open a web browser and go to
274B<http://A.B.C.D:3000/>, where C<A.B.C.D> is the IP address to your
275virtual machine that you looked up in Step 5. For example, if your
276virtual machine is using the IP address C<192.168.0.21>, you would put
277the following URL into your web browser:
278
279 http://192.168.0.21:3000/
280
281Make sure you don't forget the B<:3000> to use port 3000 instead of the
282usual port 80 that is used by HTTP by default.
2e73e2be 283
232da04a 284You should get a Catalyst Welcome Screen. If you do, feel free to jump
285right in to L<Chapter 2|Catalyst::Manual::Tutorial::02_CatalystBasics>
286of the tutorial. If you don't go get the Catalyst Welcome Screen, go
287back and carefully check each of the steps above.
288
289=item 9
290
291B<Optional:> The VI/VIM editor is already installed on the Tutorial
292Virtual Machine. In order to reduce the size of the download, Emacs is
293not pre-installed. Since people obviously have very strong opinions
294about which editor is best, :-) Debian fortunately make it very easy to
295install Emacs:
296
297 $ aptitude install emacs
2e73e2be 298
299=back
300
301
e684d796 302You will note that the Tutorial Virtual Machine uses L<local::lib> so
303that the Perl modules are run from ~/perl5 (in this case, /root/perl5)
304vs. the usual location of your "system Perl". We recommend that you
305also consider using this very handy module. It can greatly ease the
306process of maintaining and testing different combinations or Perl
307modules across development, staging, and production servers. (The
308"relocatable Perl" feature can also be used to to run both the modules
309B<and> Perl itself from your home directory [or any other directory you
310chose]).
311
312
d442cc9f 313=head1 VERSIONS AND CONVENTIONS USED IN THIS TUTORIAL
314
315This tutorial was built using the following resources. Please note that
a6b4cff5 316you may need to make adjustments for different environments and versions
317(note that trailing zeros in version numbers are not significant and may
318get dropped with some techniques for viewing them; for example, Catalyst
319v5.80020 might show up as 5.8002):
d442cc9f 320
321=over 4
322
323=item *
324
95968b61 325Debian 6 (Squeeze)
d442cc9f 326
327=item *
328
232da04a 329Catalyst v5.90002
dd88c3b6 330
22a67212 331=item *
dd88c3b6 332
232da04a 333Catalyst::Devel v1.34
d442cc9f 334
335=item *
336
232da04a 337DBIx::Class v0.08195
d442cc9f 338
fce83e5f 339=item *
340
232da04a 341Catalyst::Model::DBIC::Schema v0.54
2e73e2be 342
343=item *
344
95968b61 345Template Toolkit v2.22
fce83e5f 346
2e73e2be 347
d442cc9f 348=item *
349
232da04a 350HTML::FormFu -- v0.09004
2e73e2be 351
d442cc9f 352=item *
353
865d3efb 354B<NOTE:> You can check the versions you have installed with the
95968b61 355following command (note the slash before the space):
356
357 perl -M<_mod_name_>\ 999
358
359or:
865d3efb 360
f63a9a2b 361 perl -M<_mod_name_> -e 'print "$<_mod_name_>::VERSION\n"'
865d3efb 362
363For example:
865d3efb 364
95968b61 365 perl -MCatalyst::Devel\ 999
444d6b27 366
367or:
368
369 perl -MCatalyst::Devel -e 'print "$Catalyst::Devel::VERSION\n";'
d442cc9f 370
371=item *
372
232da04a 373This tutorial will show URLs in the format of C<http://localhost:3000>,
374but if you are running your web browser from outside the Tutorial
375Virtual Machine, you will want to substitute the IP address of your VM
376for the C<localhost> in the URLs (again, you can get the IP address for
377eth0 from the C<ifconfig> command). For example, if your VM has an
378IP address of 192.168.245.128, you will want to use a base URL of
379C<http://192.168.245.128:3000>. Note that the development server
380defaults to port 3000 (you can change with with the "-p" option on the
381command line.
382
383B<Please Note:> Depending on the web browser you are using, you might need
8168726b 384to hit C<Shift+Reload> or C<Ctrl+Reload> to pull a fresh page when
385testing your application at various points (see
386L<http://en.wikipedia.org/wiki/Bypass_your_cache> for a comprehensive
387list of options for each browser). Also, the C<-k> keepalive option to
388the development server can be necessary with some browsers (especially
232da04a 389Internet Explorer).
0c51850e 390
d442cc9f 391=back
392
1390ef0e 393
d442cc9f 394=head1 DATABASES
395
396This tutorial will primarily focus on SQLite because of its simplicity
397of installation and use; however, modifications in the script required
a6b4cff5 398to support MySQL and PostgreSQL will be presented in the Appendix.
d442cc9f 399
a6b4cff5 400B<Note:> One of the advantages of using tools like Catalyst and DBIC is
401that applications become much more database independent. As such, you
402will notice that only the C<.sql> files used to initialize the database
403change between database systems: most of the code generally remains the
d442cc9f 404same.
405
1390ef0e 406
24acc5d7 407You can jump to the next chapter of the tutorial here:
408L<Catalyst Basics|Catalyst::Manual::Tutorial::02_CatalystBasics>
409
410
d442cc9f 411=head1 AUTHOR
412
413Kennedy Clark, C<hkclark@gmail.com>
414
8168726b 415Please report any errors, issues or suggestions to the author. The
416most recent version of the Catalyst Tutorial can be found at
59884771 417L<http://dev.catalyst.perl.org/repos/Catalyst/Catalyst-Manual/5.80/trunk/lib/Catalyst/Manual/Tutorial/>.
d442cc9f 418
ec3ef4ad 419Copyright 2006-2010, Kennedy Clark, under the
420Creative Commons Attribution Share-Alike License Version 3.0
865d3efb 421(L<http://creativecommons.org/licenses/by-sa/3.0/us/>).