• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Writing webapps with Perl Dancer
 

Writing webapps with Perl Dancer

on

  • 36,636 views

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.

Statistics

Views

Total Views
36,636
Views on SlideShare
26,734
Embed Views
9,902

Actions

Likes
14
Downloads
170
Comments
0

31 Embeds 9,902

http://perldancer.org 5001
http://www.perldancer.org 2986
http://blog.sudobits.com 784
http://osarena.net 350
http://codepasta.net 350
http://feeds.feedburner.com 74
http://www.slideshare.net 72
http://www.yoolink.fr 68
http://irrlab.com 55
http://ana.im 46
http://dancer.pm 34
http://www.yoolinkpro.com 23
http://localhost 10
http://isunny.tistory.com 10
http://www.codeordie.org 8
http://www.stoblog.gr 7
http://translate.googleusercontent.com 5
http://feedly.com 3
http://127.0.0.1 2
http://0.0.0.0 2
http://a0.twimg.com 2
http://www.linkedin.com 1
http://www.irkstroi.ru 1
http://172.16.123.130 1
http://192.168.1.204 1
http://www.sukria.net 1
http://paper.li 1
http://supernova.preshweb.co.uk 1
http://www.lmodules.com 1
http://webcache.googleusercontent.com 1
http://www.inoreader.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Writing webapps with Perl Dancer Writing webapps with Perl Dancer Presentation Transcript

    • Dancer A micro framework for writing web applications Alexis Sukrieh OSDCfr 2009
    • Alexis Sukrieh http://sukria.net http://twitter.com/sukria http://search.cpan.org/~sukria/
    • Dancer http://dancer.sukria.net $ sudo cpan Dancer http://github.com/sukria/Dancer
    • Description Syntax Application Tree Environments Deployment
    • webapp framework for Perl
    • Again, another one !!?
    • YES.
    • Why ?
    • Web Development in Perl can be :
    • CGI.pm : fat webapp junkfood
    • Catalyst : it's huge, but, it's huge.
    • Plenty of other frameworks alike
    • Ruby introduced something else
    • A new approach to webapp development
    • Perl needed the same
    • definetly
    • Kindly stolen from Ruby
    • So, Dancer is a framework ...
    • a micro framework
      • Lightweight
      • Standalone
      • PSGI/Plack compliant
      • expressive syntax
      • few configuration
      • painless for the developer
      • enough talking, let's dance
    •  
      • Sorry, I mean ...
    • package MyApp ; use Dancer; get '/' => sub { 'Hello OSDCfr 2009!' }; dance;
    • A dancer script is a webserver
    • $ ./myApp.pl >> Listening on 127.0.0.1:3000 == Entering the development dance floor ...
    • Working webapp ready to be hacked
    • » happiness : he can WSFC now
    • Description Syntax Application Tree Environments Deployment
    • A Dancer app is defined with route handlers
    • a route handler is basically a sub
    • bound to an HTTP method (typically ' get ' or ' post ')
    • with a path pattern
    • /foo /bar/:var /baz/* r('/stuff/([a-z0-9]+)/')
    • Static pattern (path) / /foo /bar/baz
    • pattern with named tokens /hello/:buddy my $name = params->{buddy}
    • pattern with anonymous tokens /show/*.* my ($file, $ext) = splat;
    • pseudo-regexp-defined patterns r('/post/([a-z0-9]+)') my ($post) = splat; # $1
    • processing a request = finding a matching route handler
    • 404 No matching route handler » no joy
    • Route handler found » Joy
    • When found, a route handler is executed
    • it can alter the response headers get '/' => sub { content_type 'text/plain'; return 'this is plain text'  };
    • pass to the next matching handler get '/lazy' => sub { pass and return false; };
    • serve a static file get '/dowload/:file' => sub { my $file = params->{file}; if (! -f $file) { pass and return false; } send_file $file; };
    • throw an error get '/forbidden' => sub { send_error 'Nope'; };
    • redirect to somewhere else get '/forbidden' => sub { redirect '/better/place'  };
    • and of course, render a content get '/showme' => sub { template 'showme', { var => 'foo'}; };
    • return value = content to render
    • logging ?
    • get '/' => sub { # ... debug 'here it is'; }; » logs/development.log
    • pre-processing ?
    • before sub { do_some_init_stuff(); params->{foo} = 'beenthere'; };
    • static file serving ?
    • existing file in $appdir/public = file served , no handler needed
    • Description Syntax Application Tree Environments Deployment
    • app.pl
    • app.pl views/ index.tt
    • app.pl views/ index.tt layouts/ main.tt
    • app.pl views/ index.tt layouts/ main.tt config.yml
    • app.pl views/ index.tt layouts/ main.tt config.yml environments/ development.yml production.yml
    • app.pl views/ index.tt layouts/ main.tt config.yml environments/ development.yml production.yml public/
    • bootstraping ?
    • $ dancer -a MyApp
    • + 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
    • » Working webapp, pre-configured, pre-designed and waiting for your hacks
    • Description Syntax Application Tree Environments Deployment
    • settings : customizing the app
    • settings in the app code
    • use Dancer; set layout => 'application' set foo => 42; set content_type =>'text/plain';
    • handy at first, but dirty
    • YAML config files: goodness
    • # config.yml layout: 'application' foo: 42 content_type: 'text/plain'
    • config.yml = global configuration
    • environments/foo.yml « foo » configuration
    • $ dancer -e foo runs the app in « foo » environment
    • development.yml warnings: 1 show_errors: 1 ...
    • production.yml warnings: 0 show_errors: 0 ...
    • show_errors: 1
    • show_errors: 0
    • Description Syntax Application Tree Environments Deployment
    • For production needs, use PSGI/Plack
    • Plack is to Perl : what Rack is to Ruby what WSGI is to Python
    • universal server <-> application gateway
    • PSGI/Plack miyagawa http://plackperl.org
    • Dancer supports Plack since 0.9904
    • app.psgi tells Plack how to dance
    • use CGI::PSGI; use MyApp; my $handler = sub { my $env = shift; my $cgi = CGI::PSGI->new($env); Dancer->dance($cgi); };
    • The app is now PSGI/Plack aware
    • $ plackup -a app.psgi &
    • Webservers have PSGI adapters
    • Apache (mod_psgi) nginx Perlbal HTTP::Server::Fast Plack (standalone)
    • Conf example with Apache <Location /> SetHandler perl-script PerlHandler Plack::Server::Apache2 PerlSetVar psgi_app /path/app.psgi </Location>
    • Works pretty well
    • enjoy web development with Perl
    • DANCE!