Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Web That Was - The Promise and Decline of mod_perl

The Web That Was - The Promise and Decline of mod_perl

I talk about the strengths of the Apache C API and how mod_perl integrated with it. Unfortunately, I find perl is in decline, and I asked ChicagoRuby for advice on switching to Ruby.

Aijaz Ansari

January 19, 2013
Tweet

Other Decks in Technology

Transcript

  1. The Web That Was Aijaz Ansari @_aijaz_ The Promise and

    Decline of mod_perl 1 Monday, January 21, 13
  2. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 11 Monday, January 21, 13
  3. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 12 Monday, January 21, 13
  4. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 13 Monday, January 21, 13
  5. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 14 Monday, January 21, 13
  6. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 15 Monday, January 21, 13
  7. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 16 Monday, January 21, 13
  8. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 17 Monday, January 21, 13
  9. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 18 Monday, January 21, 13
  10. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 19 Monday, January 21, 13
  11. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 20 Monday, January 21, 13
  12. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 21 Monday, January 21, 13
  13. Request Phases • Post-read-request - e.g.: reloading changed modules •

    URI Translation - honor aliases • Map To Storage - where’s the file? • Header Parsing - e.g.: block certain browsers • Access Control - block by IP address, time of day • Authentication - who are you? • Authorization - what are you allowed to see • Mime-type - set response MIME type • Fixups - last-minute tweaks to env, etc. • RESPONSE - most of the work is done here • Logging - always happens • Cleanup - after client goes away - don’t keep it waiting 22 Monday, January 21, 13
  14. httpd.conf <Directory .../htdocs/rest/rest> SetHandler perl-script PerlAuthenHandler SLA PerlResponseHandler SL AuthType

    Basic AuthName "Speak Friend And Enter" Require valid-user Order allow,deny Allow from all </Directory> 25 Monday, January 21, 13
  15. httpd.conf <Directory .../htdocs/rest/rest> SetHandler perl-script PerlAuthenHandler SLA PerlResponseHandler SL AuthType

    Basic AuthName "Speak Friend And Enter" Require valid-user Order allow,deny Allow from all </Directory> 26 Monday, January 21, 13
  16. httpd.conf <Directory .../htdocs/rest/rest> SetHandler perl-script PerlAuthenHandler SLA PerlResponseHandler SL AuthType

    Basic AuthName "Speak Friend And Enter" Require valid-user Order allow,deny Allow from all </Directory> 27 Monday, January 21, 13
  17. httpd.conf <Directory .../htdocs/rest> SetHandler perl-script PerlAuthenHandler SLA PerlResponseHandler SL AuthType

    Basic AuthName "Speak Friend And Enter" Require valid-user Order allow,deny Allow from all </Directory> 28 Monday, January 21, 13
  18. PerlAuthenHandler sub handler { my $r = shift; my ($status,

    $password) = $r->get_basic_auth_pw; return OK if authenticated($r, $dbh, $r->user, $password); return HTTP_UNAUTHORIZED; } 29 Monday, January 21, 13
  19. PerlAuthenHandler sub handler { my $r = shift; my ($status,

    $password) = $r->get_basic_auth_pw; return OK if authenticated($r, $dbh, $r->user, $password); return HTTP_UNAUTHORIZED; } sub authenticated { my ($r, $dbh, $login, $p) = @_; my $result = &Database::getRow($r, $dbh, "select p=crypt(?, pass) as ok from slUser where email=?", $p, $login); if ($result && $result->{ok}) { return 1; } return 0; } 30 Monday, January 21, 13
  20. PerlResponseHandler sub handler { my $r = shift; my $file

    = getFilePath; my $text = &Template::readFile ($r, $file); $r->print($text); } 31 Monday, January 21, 13
  21. HTML Templates file1.html: ----------- <html> <head></head> <body> <h1>Welcome</h1> <include MyFilterModule

    /file2.html > <h1>Goodbye</h1> </body> </html> 32 Monday, January 21, 13
  22. Filter Module MyFilterModule.pm: ------------------ sub handle { my ($r) =

    @_; my $hash = {}; # process input $hash = { var1 => "Hello", var2 => "World", print => 1, list => [ { name => 'Foo' }, { name => 'Bar'} ] }; return $hash; } 1; 33 Monday, January 21, 13
  23. HTML Templates file1.html: ----------- <html> <head></head> <body> <h1>Welcome</h1> <include MyFilterModule

    /file2.html > <h1>Goodbye</h1> </body> </html> 34 Monday, January 21, 13
  24. The Template File file2.html: ----------- $var1, $var2! <ul> <aohL list>

    <li>$name</li> </aohL></ul> <ifV print>TRUE<elseV>FALSE</ifV> { var1 => "Hello", var2 => "World", print => 1, list => [ { name => 'Foo' }, { name => 'Bar'} ] }; 35 Monday, January 21, 13
  25. The Final Output <html> <head></head> <body> <h1>Welcome</h1> Hello, World! <ul>

    <li>Foo</li> <li>Bar</li> </ul> TRUE <h1>Goodbye</h1> </body> </html> 36 Monday, January 21, 13
  26. The Decline Libraries are stagnant Perl talent is hard to

    find Installation is complex 37 Monday, January 21, 13
  27. The Decline Libraries are stagnant Perl talent is hard to

    find The community is shrinking Installation is complex 37 Monday, January 21, 13
  28. Do I need to change the way I think? Does

    Ruby have these issues? 38 Monday, January 21, 13