Your SlideShare is downloading. ×
Writing webapps with Perl Dancer
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Writing webapps with Perl Dancer

37,481

Published on

Dancer is a micro framework for Perl, this presentation describes it and show how to use it.

Dancer is a micro framework for Perl, this presentation describes it and show how to use it.

Published in: Technology
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
37,481
On Slideshare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
182
Comments
0
Likes
16
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Dancer A micro framework for writing web applications Alexis Sukrieh OSDCfr 2009
  • 2. Alexis Sukrieh http://sukria.net http://twitter.com/sukria http://search.cpan.org/~sukria/
  • 3. Dancer http://dancer.sukria.net $ sudo cpan Dancer http://github.com/sukria/Dancer
  • 4. Description Syntax Application Tree Environments Deployment
  • 5. webapp framework for Perl
  • 6. Again, another one !!?
  • 7. YES.
  • 8. Why ?
  • 9. Web Development in Perl can be :
  • 10. CGI.pm : fat webapp junkfood
  • 11. Catalyst : it's huge, but, it's huge.
  • 12. Plenty of other frameworks alike
  • 13. Ruby introduced something else
  • 14. A new approach to webapp development
  • 15. Perl needed the same
  • 16. definetly
  • 17. Kindly stolen from Ruby
  • 18. So, Dancer is a framework ...
  • 19. a micro framework
  • 20.
      Lightweight
  • 21.
      Standalone
  • 22.
      PSGI/Plack compliant
  • 23.
      expressive syntax
  • 24.
      few configuration
  • 25.
      painless for the developer
  • 26.
      enough talking, let's dance
  • 27.  
  • 28.
      Sorry, I mean ...
  • 29. package MyApp ; use Dancer; get '/' => sub { 'Hello OSDCfr 2009!' }; dance;
  • 30. A dancer script is a webserver
  • 31. $ ./myApp.pl >> Listening on 127.0.0.1:3000 == Entering the development dance floor ...
  • 32. Working webapp ready to be hacked
  • 33. » happiness : he can WSFC now
  • 34. Description Syntax Application Tree Environments Deployment
  • 35. A Dancer app is defined with route handlers
  • 36. a route handler is basically a sub
  • 37. bound to an HTTP method (typically ' get ' or ' post ')
  • 38. with a path pattern
  • 39. /foo /bar/:var /baz/* r('/stuff/([a-z0-9]+)/')
  • 40. Static pattern (path) / /foo /bar/baz
  • 41. pattern with named tokens /hello/:buddy my $name = params->{buddy}
  • 42. pattern with anonymous tokens /show/*.* my ($file, $ext) = splat;
  • 43. pseudo-regexp-defined patterns r('/post/([a-z0-9]+)') my ($post) = splat; # $1
  • 44. processing a request = finding a matching route handler
  • 45. 404 No matching route handler » no joy
  • 46. Route handler found » Joy
  • 47. When found, a route handler is executed
  • 48. it can alter the response headers get '/' => sub { content_type 'text/plain'; return 'this is plain text'  };
  • 49. pass to the next matching handler get '/lazy' => sub { pass and return false; };
  • 50. serve a static file get '/dowload/:file' => sub { my $file = params->{file}; if (! -f $file) { pass and return false; } send_file $file; };
  • 51. throw an error get '/forbidden' => sub { send_error 'Nope'; };
  • 52. redirect to somewhere else get '/forbidden' => sub { redirect '/better/place'  };
  • 53. and of course, render a content get '/showme' => sub { template 'showme', { var => 'foo'}; };
  • 54. return value = content to render
  • 55. logging ?
  • 56. get '/' => sub { # ... debug 'here it is'; }; » logs/development.log
  • 57. pre-processing ?
  • 58. before sub { do_some_init_stuff(); params->{foo} = 'beenthere'; };
  • 59. static file serving ?
  • 60. existing file in $appdir/public = file served , no handler needed
  • 61. Description Syntax Application Tree Environments Deployment
  • 62. app.pl
  • 63. app.pl views/ index.tt
  • 64. app.pl views/ index.tt layouts/ main.tt
  • 65. app.pl views/ index.tt layouts/ main.tt config.yml
  • 66. app.pl views/ index.tt layouts/ main.tt config.yml environments/ development.yml production.yml
  • 67. app.pl views/ index.tt layouts/ main.tt config.yml environments/ development.yml production.yml public/
  • 68. bootstraping ?
  • 69. $ dancer -a MyApp
  • 70. + MyApp + MyApp/views + MyApp/views/index.tt + MyApp/views/layouts + MyApp/views/layouts/main.tt + MyApp/environments + MyApp/environments/development.yml + MyApp/environments/production.yml + MyApp/config.yml + MyApp/app.psgi + MyApp/MyApp.pm + MyApp/MyApp.pl + MyApp/public + MyApp/public/css + MyApp/public/css/style.css + MyApp/public/css/error.css + MyApp/public/images + MyApp/public/404.html + MyApp/public/500.html
  • 71. » Working webapp, pre-configured, pre-designed and waiting for your hacks
  • 72. Description Syntax Application Tree Environments Deployment
  • 73. settings : customizing the app
  • 74. settings in the app code
  • 75. use Dancer; set layout => 'application' set foo => 42; set content_type =>'text/plain';
  • 76. handy at first, but dirty
  • 77. YAML config files: goodness
  • 78. # config.yml layout: 'application' foo: 42 content_type: 'text/plain'
  • 79. config.yml = global configuration
  • 80. environments/foo.yml « foo » configuration
  • 81. $ dancer -e foo runs the app in « foo » environment
  • 82. development.yml warnings: 1 show_errors: 1 ...
  • 83. production.yml warnings: 0 show_errors: 0 ...
  • 84. show_errors: 1
  • 85. show_errors: 0
  • 86. Description Syntax Application Tree Environments Deployment
  • 87. For production needs, use PSGI/Plack
  • 88. Plack is to Perl : what Rack is to Ruby what WSGI is to Python
  • 89. universal server <-> application gateway
  • 90. PSGI/Plack miyagawa http://plackperl.org
  • 91. Dancer supports Plack since 0.9904
  • 92. app.psgi tells Plack how to dance
  • 93. use CGI::PSGI; use MyApp; my $handler = sub { my $env = shift; my $cgi = CGI::PSGI->new($env); Dancer->dance($cgi); };
  • 94. The app is now PSGI/Plack aware
  • 95. $ plackup -a app.psgi &
  • 96. Webservers have PSGI adapters
  • 97. Apache (mod_psgi) nginx Perlbal HTTP::Server::Fast Plack (standalone)
  • 98. Conf example with Apache <Location /> SetHandler perl-script PerlHandler Plack::Server::Apache2 PerlSetVar psgi_app /path/app.psgi </Location>
  • 99. Works pretty well
  • 100. enjoy web development with Perl
  • 101. DANCE!

×