Your SlideShare is downloading. ×
0
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
Deploying Plack Web Applications: OSCON 2011
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

Deploying Plack Web Applications: OSCON 2011

16,840

Published on

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

No Downloads
Views
Total Views
16,840
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
40
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
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Deploying PlackWeb Applications Tatsuhiko Miyagawa O’Reilly OSCON 2011
    • 2. Me• Tatsuhiko Miyagawa• @miyagawa• Lives in San Francisco, CA• Software Engineer, DotCloud
    • 3. My Software• Plack• PSGI• cpanminus• carton (NEW!)
    • 4. PSGI
    • 5. PSGI in 3 min.
    • 6. #
PSGImy
$app
=
sub
{



my
$env
=
shift;



return
[








200,







[
‘Content‐Type’,
‘text/plain’
],







[
‘Hello
World’
],



];};
    • 7. Catalyst CGI::App Jifty Mojolicious Dancer Plack::Middleware PSGI Plack::Handler::* (CGI, FCGI, Apache)Apache lighttpd HTTP::Server::PSGI mod_psgi PerlbalStarman Twiggy uWSGI Corona Feersum
    • 8. Mason CGI::Application Jifty CatalystMason::CGIHandler CGI.pm Catalyst::Engine mod_perl CGI fastcgi HTTP::Server ::Simple Apache IIS lighttpd nginx
    • 9. Catalyst CGI::App Jifty Mojolicious Dancer Plack::Middleware PSGI Plack::Handler::* (CGI, FCGI, Apache)Apache lighttpd HTTP::Server::PSGI mod_psgi PerlbalStarman Twiggy uWSGI Corona Feersum
    • 10. Momentum
    • 11. Catalyst 5.9Built-in PSGI/Plack support
    • 12. CGI::Application 4.5 Built-in PSGI support
    • 13. Dancer, Mojolicious
    • 14. 20+Web Frameworks
    • 15. 25+Web Servers/Handlers
    • 16. 150+Plack Middleware
    • 17. Cloud (PaaS)
    • 18. Still not convinced?
    • 19. “FastCGI is good enough”? http://xrl.us/psgireddit
    • 20. Deploying PlackWeb applications
    • 21. 1)Server Environment
    • 22. 2)Code Deployment
    • 23. 3)Application Environment
    • 24. 1)Server Environment
    • 25. Writing a PSGI app?
    • 26. Maypole Mason Mojolicious Sledge Catalyst Spoon PageKit AxKit Egg Gantry Continuity SolsticeMojolicious Tripletail Konstrukt Reaction Jifty WebGUI OpenInteract Squatting Dancer CGI::Application Ark Angelos Noe Schenker Tatsumaki Amon Apache2::WebApp Web::Simple Apache2::REST SweetPea Hydrant Titanium
    • 27. Pick one.Whichever you like.
    • 28. Deploying a PSGI app?
    • 29. HTTP::Server::PSGI CGI FastCGI mod_perl mod_perl2 Fastpass Starman Starlet TwiggyHTTP::Server::Simple::PSGI Feersum Corona mod_psgi evpsgi nginx_psgi Pelrbal uWSGIFCGI::EV AnyEvent::FCGI AnyEvent::HTTPD Prack/nack Mongrel2
    • 30. Pick one.Whichever you like.
    • 31. “I don’t know which I like the most.”
    • 32. Some hints
    • 33. Based on my experience and your experience
    • 34. HTTP::Server::PSGI• Plack Built-in• Pure Perl• Single-process, cross platform• Experimental IPv6, SSL• Automatic reloading with -r
    • 35. HTTP::Server::PSGI• Plack Built-in• Pure Perl• Single-process, cross platform• Experimental IPv6, SSL• Automatic reloading with -r Great for development and testing
    • 36. HTTP::Server::Simple::PSGI• Zero non-core dependencies (other than HTTP::Server::Simple)• Single-process, extensible with H::S::S• Works on 5.005_*• Dancer’s default web server
    • 37. HTTP::Server::Simple::PSGI• Zero non-core dependencies (other than HTTP::Server::Simple)• Single-process, extensible with H::S::S• Works on 5.005_*• Dancer’s default web server Great for embedding e.g. Android
    • 38. CGI• Plack::Handler::CGI• Almost universally available• Quite slow and inefficient• Reasonably easy to run from the shell
    • 39. CGI• Plack::Handler::CGI• Almost universally available• Quite slow and inefficient• Reasonably easy to run from the shell Last resort for Win32/IIS laptop web apps
    • 40. mod_perl• Plack::Handler::Apache[12]• Lots of hooks and Apache modules• Porting from mod_perl to PSGI might be tricky. (There are some tools/attempts)
    • 41. mod_perl• Plack::Handler::Apache[12]• Lots of hooks and Apache modules• Porting from mod_perl to PSGI might be tricky. (There are some tools/attempts) Not recommended unless you’ve hugely invested in mod_perl
    • 42. Perlbal::Plugin::PSGI• Pure perl load balancer• LiveJournal, TypePad etc.• Reproxying, Plugins etc.• Danga::Socket (non-blocking)
    • 43. Perlbal::Plugin::PSGI• Pure perl load balancer• LiveJournal, TypePad etc.• Reproxying, Plugins etc.• Danga::Socket (non-blocking) Considered EXPERIMENTAL
    • 44. mod_psgi• Apache module to run PSGI apps• No mod_perl hooks• Just persistent PSGI apps• Simpler
    • 45. mod_psgi• Apache module to run PSGI apps• No mod_perl hooks• Just persistent PSGI apps• Simpler Considered EXPERIMENTAL
    • 46. nginx_mod_psgi• nginx native PSGI extension• https://github.com/yko/ngx_mod_psgi• Pretty new
    • 47. nginx_mod_psgi• nginx native PSGI extension• https://github.com/yko/ngx_mod_psgi• Pretty new Considered EXPERIMENTAL
    • 48. Mongrel2• Zed Shaw• ZeroMQ• Pretty cool stuff• lestrrat (Plack::Handler::Mongrel2)• jockway (AnyEvent::Mongrel2)
    • 49. Mongrel2• Zed Shaw• ZeroMQ• Pretty cool stuff• lestrrat (Plack::Handler::Mongrel2)• jockway (AnyEvent::Mongrel2) Considered EXPERIMENTAL
    • 50. Recommended Servers?
    • 51. Standalone HTTP Servers
    • 52. FastCGI daemons
    • 53. Put it behind the frontend (nginx etc.)
    • 54. Starman• Standalone HTTP• Prefork, app preloading• Dynamic process management• TCP/UNIX Sockets• Partial HTTP/1.1 support• Graceful restarts
    • 55. Starman (cont.)• The Lacuna Expanse• perl.org• cpanratings.perl.org• etc.
    • 56. Starlet• Standalone HTTP server• Prefork, app preloading• HTTP/1.0• Max/min spare workers• Hot deploy via Server::Starter
    • 57. Starlet (cont.)• Livedoor• Hatena• etc.
    • 58. Twiggy• Standalone HTTP server• AnyEvent based• Tiny memory footprint
    • 59. Twiggy (cont.)• mixi• SAY Media• beta.metacpan.org
    • 60. Feersum• Standalone HTTP server• EV.xs• picohttpparser (C library)• AnyEvent compatible• Lighting fast
    • 61. Plack::Handler::FCGI• Standalone FastCGI daemon (or web server mode)• Preforking• TCP/UNIX sockets• FCGI.xs• Little bit of process management
    • 62. fastpass• github.com/miyagawa/fastpass• Standalone FastCGI daemon• preforking, dynamic process management• Net::FastCGI (no XS)• TCP/UNIX sockets
    • 63. FCGI::EV/AE::FCGI• Standalone FastCGI daemon• EV/AnyEvent based• asynchronous, non-blocking
    • 64. uWSGI• FastCGI-like protocol• Optimized for *SGI• built-in nginx/cherokee support• AnyEvent support in the works• Lots of configurations• harakiri mode
    • 65. uWSGI (cont.)• DotCloud.com (more server types coming!)
    • 66. Proc. UNIX Graceful Proto, Prefork Async TCP/IP XS/Perl Mgmt. Sockets RestartsStarman HTTP ✔ ✔ ✔ ✔ ✔ XS Starlet HTTP ✔ ✔ ✔ ✔ XS/PP Twiggy HTTP ✔ ✔ ✔ XS/PPFeersum HTTP ✔ ✔ XSFastCGI FCGI ✔ ✔ ✔ ✔ XSfastpass FCGI ✔ ✔ ✔ ✔ ✔ PPAE::FCGI FCGI ✔ ✔ ✔ PPFCGI::EV FCGI ✔ ✔ ✔ XSuWSGI uWSGI ✔ ✔ ✔ ✔ ✔ C/XS
    • 67. General guideline:
    • 68. “Traditional” MVC apps?Lots of RDBMS queries?Coming from mod_perl?
    • 69. Preforking servers Put it behind nginx.
    • 70. Lots of I/O bound requests?New app or can rewrite to use AE? Resource limited environment?
    • 71. Asynchronous servers Twiggy or Feersum.
    • 72. HTTP or FastCGI?
    • 73. HTTP Standalone☺• Put it behind frontend (nginx, lighttpd)• Most web servers support reverse proxy• As well as load balancers (perlbal, varnish)• Easy for human to debug and test• nginx + unix socket workers work well
    • 74. HTTP Standalone ☹• You may have to configure X-Forwarded-* and ReverseProxy middleware• Keep-alives can be problematic in dumb servers like mod_proxy on apache2• Path mismatch on frontend/backend could cause headaches
    • 75. FastCGI ☺• Many web servers support fastcgi• No need for X-Forwarded-* configuration• Potentially faster binary protocol between web server and app server• “Hot deploy” via UNIX sockets
    • 76. FastCGI ☹• Binary protocol, may not be easy to debug• Requires C/XS (but see fastpass)• Hard to get SCRIPT_NAME/PATH_INFO right (e.g. lighttpd, mod_fcgid)
    • 77. Questions/Suggestions?
    • 78. 2)Code Deployment
    • 79. Conventions = good.
    • 80. Web app convention:
    • 81. 1) PSGI endpoint
    • 82. 2) CPAN dependencies
    • 83. 1)
app.psgi2)
Makefile.PL
    • 84. >
git
commit
‐m
‘releasing
v1.0.0’>
git
tag
v1.0.0>
git
push
‐‐tags>
(checking
out
code)>
cpanm
‐‐installdeps
.>
(restart
app
servers
gracefully)
    • 85. cpanm --installdeps .
    • 86. <3
    • 87. Problem
    • 88. Pulls the latest versions of CPAN today.
    • 89. Many solutions:Shipwright, MyCPAN, orepan, DPAN
    • 90. Cartoninspired by bundler
    • 91. Carton• App-specific local environment (local::lib)• Dep-tree analysis, including versions.• Single-file,VCS friendly• Freezing/locking versions• Recreates mirror on deploy• Conservative Updates
    • 92. >
carton
install>
git
commit
‐m
‘releasing
v1.0.0’




carton.lock
Makefile.PL>
git
tag
v1.0.0>
git
push
‐‐tags>
(checking
out
code)>
carton
install
>
(restart
app
servers
gracefully)
    • 93. dotCloud will doall of this for you :) DISCLAIMER: I work for dotCloud.
    • 94. github.com/miyagawa/carton
    • 95. 3)Application Environment
    • 96. Useful middleware for deployments
    • 97. SizeLimit Port of Apache::SizeLimitSupported by Starman, Starlet, uWSGI
    • 98. use
Plack::Builder;builder
{

enable
“SizeLimit”,



max_unshared_size_in_kb
=>
4096,



check_every_n_requests
=>
5;

$app;}
    • 99. ServerStatus::Lite Port of mod_status Starlet, Starman
    • 100. use
Plack::Builder;builder
{

enable
“ServerStatus::Lite”,



path
=>
‘/server‐status’;

$app;}
    • 101. RuntimeAdds X-Runtime: header
    • 102. use
Plack::Builder;builder
{

enable
“Runtime”;

$app;}
    • 103. use
Plack::Builder;builder
{

enable
“Runtime”;

$app;}
    • 104. %
curl
‐I
http://localhost:5000/HTTP/1.0
200
OKServer:
HTTP::Server::PSGIX‐Runtime:
0.00029
    • 105. ErrorDocument Customize error pages 500/503/404 etc.
    • 106. use
Plack::Builder;builder
{

enable
“ErrorDocument”,



500
=>
‘/home/www/errors/500.html’;

$app;};
    • 107. ThrottleRate-limiting framework
    • 108. use
Plack::Builder;builder
{

enable
“Throttle::Hourly”,




max
=>
200,



backend
=>
...,



path
=>
qr!^/api!;

$app;}
    • 109. Expires Port of mod_expiresCache static files on proxy/clients
    • 110. use
Plack::Builder;builder
{

enable
“Expires”,



content_type
=>
qr!^image/!,



expires
=>
‘access
plus
3
months’;

$app;};
    • 111. Rewritemod_rewrite-ish URL rewriting pure perl syntax
    • 112. use
Plack::Builder;builder
{

enable
‘Rewrite’,
rules
=>
sub
{



s{^/here}{/there};







return
301
if
s{^/foo/}{/bar/};



return
201
if
$_
eq
‘/favicon.ico’;



return
503
if
‐e
‘/tmp/maint.txt’;

};

$app;}
    • 113. Auth::Basic/Digest Add Basic authenticationwith any Auth::Simple backends
    • 114. use
Plack::Builder;use
Authen::Simple::Kerberos;my
$auth
=
Authen::Simple::Kerberos‐>new(

realm
=>
‘REALM.MYCOMPANY.COM’,);builder
{

enable
“Auth::Basic”,



authenticator
=>
$auth;

$app;};
    • 115. PSGI Deployment Survey
    • 116. ~100 responses Thank you!
    • 117. What category describes your apps best?
    • 118. Intranet 9% Personal 21%Small to mid-scale 49% Large scale 21%
    • 119. Where is it hosted?
    • 120. VPS Colocation Own Data Center Enterprise Home Cloud
    • 121. Operating Systems?
    • 122. Ubuntu Debian CentOS RHEL LinuxFreeBSDMac OS XWindows Solaris 0 10 20 30 40
    • 123. Perl versions?
    • 124. 604530150 “5.8” “5.10” “5.12” “5.14”
    • 125. Web Frameworks?
    • 126. (in-house) Catalyst Mojolicious DancerCGI::Application Tatsumaki Amon2 Mason 0 10 20 30 40
    • 127. When did you migrate or start using PSGI?
    • 128. 2009 Year 2010 Q2 2010 Q4 2011 Q2 Future
    • 129. Which PSGI server?
    • 130. Starman Starlet TwiggyPlack::Handler::FCGI mod_perl 2 HTTP::Server::PSGI H::S::Simple::PSGI CGI Feersum uWSGI mod_perl 1.3 0 15 30 45 60
    • 131. FastCGI web servers mod_fcgid 8%lighttpd 20% nginx 40% mod_fastcgi 33%
    • 132. Frontend web servers nginxmod_proxy perlbal Varnish lighttpd Squid
    • 133. How did you measure the right # of servers and worker processes?
    • 134. Guess Defaults 7% 6% by RAMby CPU 40% 19% by req. time 27%
    • 135. How do you keeplogs of your apps?
    • 136. Log4perldaemontools syslog logrotateLog::Dispatch Log::Minimal supervisor runit Others
    • 137. Results will be posted onhttp://blog.plackperl.org/
    • 138. One more thing...
    • 139. REPLInteractiveDebugger
    • 140. Thanks! Check out Booth 527for FREE DotCloud T-shirt

    ×