Share
Embed
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
Transcript
51 slides
-
The Web That Was Aijaz Ansari @_aijaz_ The Promise and
Decline of mod_perl 1 Monday, January 21, 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 11 Monday, January 21, 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 12 Monday, January 21, 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 13 Monday, January 21, 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 14 Monday, January 21, 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 15 Monday, January 21, 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 16 Monday, January 21, 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 17 Monday, January 21, 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 18 Monday, January 21, 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 19 Monday, January 21, 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 20 Monday, January 21, 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 21 Monday, January 21, 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 -
Enter mod_perl Complete access to C API via Perl Long-running
process 23 Monday, January 21, 13 -
How I Use It Writing a RESTful Service 24 Monday,
January 21, 13 -
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 -
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 -
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 -
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 -
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 -
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 -
PerlResponseHandler sub handler { my $r = shift; my $file
= getFilePath; my $text = &Template::readFile ($r, $file); $r->print($text); } 31 Monday, January 21, 13 -
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 -
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 -
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 -
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 -
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 -
The Decline Libraries are stagnant Perl talent is hard to
find Installation is complex 37 Monday, January 21, 13 -
The Decline Libraries are stagnant Perl talent is hard to
find The community is shrinking Installation is complex 37 Monday, January 21, 13 -
Do I need to change the way I think? Does
Ruby have these issues? 38 Monday, January 21, 13