SlideShare a Scribd company logo
1 of 143
Deploying Plack
Web Applications
    Tatsuhiko Miyagawa
   O’Reilly OSCON 2011
Me

• Tatsuhiko Miyagawa
• @miyagawa
• Lives in San Francisco, CA
• Software Engineer, DotCloud
My Software

• Plack
• PSGI
• cpanminus
• carton (NEW!)
PSGI
PSGI in 3 min.
#
PSGI
my
$app
=
sub
{




my
$env
=
shift;




return
[









200,








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








[
‘Hello
World’
],




];
};
Catalyst    CGI::App           Jifty        Mojolicious   Dancer


                                                  Plack::Middleware

                                PSGI


    Plack::Handler::* (CGI, FCGI, Apache)


Apache       lighttpd       HTTP::Server::PSGI    mod_psgi     Perlbal


Starman      Twiggy        uWSGI            Corona   Feersum
Mason           CGI::Application         Jifty               Catalyst




Mason::CGIHandler
                                 CGI.pm                  Catalyst::Engine


                     mod_perl          CGI     fastcgi


    HTTP::Server
      ::Simple      Apache             IIS      lighttpd          nginx
Catalyst    CGI::App           Jifty        Mojolicious   Dancer


                                                  Plack::Middleware

                                PSGI


    Plack::Handler::* (CGI, FCGI, Apache)


Apache       lighttpd       HTTP::Server::PSGI    mod_psgi     Perlbal


Starman      Twiggy        uWSGI            Corona   Feersum
Momentum
Catalyst 5.9
Built-in PSGI/Plack support
CGI::Application 4.5
    Built-in PSGI support
Dancer, Mojolicious
20+
Web Frameworks
25+
Web Servers/Handlers
150+
Plack Middleware
Cloud (PaaS)
Still not convinced?
“FastCGI is good enough”?
    http://xrl.us/psgireddit
Deploying Plack
Web applications
1)
Server Environment
2)
Code Deployment
3)
Application Environment
1)
Server Environment
Writing a PSGI app?
Maypole Mason Mojolicious Sledge Catalyst Spoon
    PageKit AxKit Egg Gantry Continuity Solstice
Mojolicious 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
Pick one.
Whichever you like.
Deploying a PSGI app?
HTTP::Server::PSGI CGI FastCGI mod_perl
 mod_perl2 Fastpass Starman Starlet Twiggy
HTTP::Server::Simple::PSGI Feersum Corona
 mod_psgi evpsgi nginx_psgi Pelrbal uWSGI
FCGI::EV AnyEvent::FCGI AnyEvent::HTTPD
           Prack/nack Mongrel2
Pick one.
Whichever you like.
“I don’t know which
   I like the most.”
Some hints
Based on my experience
  and your experience
HTTP::Server::PSGI
• Plack Built-in
• Pure Perl
• Single-process, cross platform
• Experimental IPv6, SSL
• Automatic reloading with -r
HTTP::Server::PSGI
• Plack Built-in
• Pure Perl
• Single-process, cross platform
• Experimental IPv6, SSL
• Automatic reloading with -r
  Great for development and testing
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
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
CGI
• Plack::Handler::CGI
• Almost universally available
• Quite slow and inefficient
• Reasonably easy to run from the shell
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
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)
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
Perlbal::Plugin::PSGI

• Pure perl load balancer
• LiveJournal, TypePad etc.
• Reproxying, Plugins etc.
• Danga::Socket (non-blocking)
Perlbal::Plugin::PSGI

• Pure perl load balancer
• LiveJournal, TypePad etc.
• Reproxying, Plugins etc.
• Danga::Socket (non-blocking)
     Considered EXPERIMENTAL
mod_psgi

• Apache module to run PSGI apps
• No mod_perl hooks
• Just persistent PSGI apps
• Simpler
mod_psgi

• Apache module to run PSGI apps
• No mod_perl hooks
• Just persistent PSGI apps
• Simpler
     Considered EXPERIMENTAL
nginx_mod_psgi

• nginx native PSGI extension
• https://github.com/yko/ngx_mod_psgi
• Pretty new
nginx_mod_psgi

• nginx native PSGI extension
• https://github.com/yko/ngx_mod_psgi
• Pretty new
     Considered EXPERIMENTAL
Mongrel2
• Zed Shaw
• ZeroMQ
• Pretty cool stuff
• lestrrat (Plack::Handler::Mongrel2)
• jockway (AnyEvent::Mongrel2)
Mongrel2
• Zed Shaw
• ZeroMQ
• Pretty cool stuff
• lestrrat (Plack::Handler::Mongrel2)
• jockway (AnyEvent::Mongrel2)
     Considered EXPERIMENTAL
Recommended Servers?
Standalone HTTP Servers
FastCGI daemons
Put it behind the frontend
        (nginx etc.)
Starman
•   Standalone HTTP

•   Prefork, app preloading

•   Dynamic process management

•   TCP/UNIX Sockets

•   Partial HTTP/1.1 support

•   Graceful restarts
Starman (cont.)

•   The Lacuna Expanse

•   perl.org

•   cpanratings.perl.org

•   etc.
Starlet

• Standalone HTTP server
• Prefork, app preloading
• HTTP/1.0
• Max/min spare workers
• Hot deploy via Server::Starter
Starlet (cont.)

• Livedoor
• Hatena
• etc.
Twiggy

• Standalone HTTP server
• AnyEvent based
• Tiny memory footprint
Twiggy (cont.)

• mixi
• SAY Media
• beta.metacpan.org
Feersum

• Standalone HTTP server
• EV.xs
• picohttpparser (C library)
• AnyEvent compatible
• Lighting fast
Plack::Handler::FCGI
• Standalone FastCGI daemon
  (or web server mode)
• Preforking
• TCP/UNIX sockets
• FCGI.xs
• Little bit of process management
fastpass

• github.com/miyagawa/fastpass
• Standalone FastCGI daemon
• preforking, dynamic process management
• Net::FastCGI (no XS)
• TCP/UNIX sockets
FCGI::EV/AE::FCGI

• Standalone FastCGI daemon
• EV/AnyEvent based
• asynchronous, non-blocking
uWSGI
• FastCGI-like protocol
• Optimized for *SGI
• built-in nginx/cherokee support
• AnyEvent support in the works
• Lots of configurations
• harakiri mode
uWSGI (cont.)


• DotCloud.com
  (more server types coming!)
Proc.             UNIX Graceful
           Proto,   Prefork   Async           TCP/IP                    XS/Perl
                                      Mgmt.            Sockets Restarts

Starman    HTTP       ✔                ✔        ✔        ✔        ✔       XS

 Starlet   HTTP       ✔                ✔        ✔                 ✔      XS/PP

 Twiggy    HTTP                ✔                ✔        ✔               XS/PP

Feersum    HTTP                ✔                ✔                         XS

FastCGI    FCGI       ✔                         ✔        ✔        ✔       XS

fastpass   FCGI       ✔                ✔        ✔        ✔        ✔       PP

AE::FCGI   FCGI                ✔                ✔        ✔                PP

FCGI::EV   FCGI                ✔                ✔        ✔                XS

uWSGI      uWSGI      ✔                ✔        ✔        ✔        ✔      C/XS
General guideline:
“Traditional” MVC apps?
Lots of RDBMS queries?
Coming from mod_perl?
Preforking servers
   Put it behind nginx.
Lots of I/O bound requests?
New app or can rewrite to use AE?
 Resource limited environment?
Asynchronous servers
     Twiggy or Feersum.
HTTP or FastCGI?
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
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
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
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)
Questions/Suggestions?
2)
Code Deployment
Conventions = good.
Web app convention:
1) PSGI endpoint
2) CPAN dependencies
1)
app.psgi
2)
Makefile.PL
>
git
commit
‐m
‘releasing
v1.0.0’
>
git
tag
v1.0.0
>
git
push
‐‐tags

>
(checking
out
code)
>
cpanm
‐‐installdeps
.
>
(restart
app
servers
gracefully)
cpanm --installdeps .
<3
Problem
Pulls the latest versions
    of CPAN today.
Many solutions:
Shipwright, MyCPAN, orepan, DPAN
Carton
inspired by bundler
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
>
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)
dotCloud will do
all of this for you :)
      DISCLAIMER: I work for dotCloud.
github.com/miyagawa/carton
3)
Application Environment
Useful middleware
 for deployments
SizeLimit
     Port of Apache::SizeLimit
Supported by Starman, Starlet, uWSGI
use
Plack::Builder;

builder
{


enable
“SizeLimit”,




max_unshared_size_in_kb
=>
4096,




check_every_n_requests
=>
5;


$app;
}
ServerStatus::Lite
   Port of mod_status
     Starlet, Starman
use
Plack::Builder;

builder
{


enable
“ServerStatus::Lite”,




path
=>
‘/server‐status’;


$app;
}
Runtime
Adds X-Runtime: header
use
Plack::Builder;

builder
{


enable
“Runtime”;


$app;
}
use
Plack::Builder;

builder
{


enable
“Runtime”;


$app;
}
%
curl
‐I
http://localhost:5000/
HTTP/1.0
200
OK
Server:
HTTP::Server::PSGI
X‐Runtime:
0.00029
ErrorDocument
 Customize error pages
   500/503/404 etc.
use
Plack::Builder;

builder
{


enable
“ErrorDocument”,




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


$app;
};
Throttle
Rate-limiting framework
use
Plack::Builder;

builder
{


enable
“Throttle::Hourly”,





max
=>
200,




backend
=>
...,




path
=>
qr!^/api!;


$app;
}
Expires
     Port of mod_expires
Cache static files on proxy/clients
use
Plack::Builder;

builder
{


enable
“Expires”,




content_type
=>
qr!^image/!,




expires
=>
‘access
plus
3
months’;


$app;
};
Rewrite
mod_rewrite-ish URL rewriting
      pure perl syntax
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;
}
Auth::Basic/Digest
   Add Basic authentication
with any Auth::Simple backends
use
Plack::Builder;
use
Authen::Simple::Kerberos;

my
$auth
=
Authen::Simple::Kerberos‐>new(


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

builder
{


enable
“Auth::Basic”,




authenticator
=>
$auth;


$app;
};
PSGI Deployment
     Survey
~100 responses
    Thank you!
What category describes
   your apps best?
Intranet
                        9%

                            Personal
                              21%
Small to mid-scale
       49%


                      Large scale
                         21%
Where is it hosted?
VPS   Colocation   Own Data Center   Enterprise   Home   Cloud
Operating Systems?
Ubuntu

  Debian

 CentOS

   RHEL

   Linux

FreeBSD

Mac OS X

Windows

  Solaris

            0   10   20   30   40
Perl versions?
60


45


30


15


0
     “5.8”   “5.10”   “5.12”   “5.14”
Web Frameworks?
(in-house)


       Catalyst


    Mojolicious


        Dancer


CGI::Application


     Tatsumaki


         Amon2


         Mason

                   0   10   20   30   40
When did you migrate
 or start using PSGI?
2009 Year   2010 Q2   2010 Q4   2011 Q2   Future
Which PSGI server?
Starman

             Starlet

             Twiggy

Plack::Handler::FCGI

         mod_perl 2

 HTTP::Server::PSGI

  H::S::Simple::PSGI

                CGI

           Feersum

             uWSGI

       mod_perl 1.3

                       0   15   30   45   60
FastCGI web servers


      mod_fcgid
         8%
lighttpd
  20%             nginx
                  40%




  mod_fastcgi
     33%
Frontend web servers


    nginx

mod_proxy

   perlbal

   Varnish

  lighttpd

    Squid
How did you measure the right # of
  servers and worker processes?
Guess
    Defaults 7%
      6%

                        by RAM
by CPU                   40%
 19%




         by req. time
             27%
How do you keep
logs of your apps?
Log4perl


daemontools


      syslog


    logrotate


Log::Dispatch


 Log::Minimal


   supervisor


        runit


      Others
Results will be posted on
http://blog.plackperl.org/
One more thing...
REPL
InteractiveDebugger
Thanks!
  Check out Booth 527
for FREE DotCloud T-shirt

More Related Content

What's hot

No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9Ilya Grigorik
 
DevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and WebminDevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and Webminpostrational
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryTatsuhiko Miyagawa
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and GroovyClaus Ibsen
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваMail.ru Group
 
Keybase Vault Auto-Unseal HashiTalks2020
Keybase Vault Auto-Unseal HashiTalks2020Keybase Vault Auto-Unseal HashiTalks2020
Keybase Vault Auto-Unseal HashiTalks2020Bas Meijer
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Claus Ibsen
 
Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Chris Tankersley
 
Gruntwork Executive Summary
Gruntwork Executive SummaryGruntwork Executive Summary
Gruntwork Executive SummaryYevgeniy Brikman
 
Using Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityUsing Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityClaus Ibsen
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration libraryClaus Ibsen
 
Building real time applications with Symfony2
Building real time applications with Symfony2Building real time applications with Symfony2
Building real time applications with Symfony2Antonio Peric-Mazar
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for DevelopmentChris Tankersley
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersJavan Rasokat
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Yevgeniy Brikman
 
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic ContentCaching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic ContentFastly
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Fastly
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadAll Things Open
 
Stupid Boot Tricks: using ipxe and chef to get to boot management bliss
Stupid Boot Tricks: using ipxe and chef to get to boot management blissStupid Boot Tricks: using ipxe and chef to get to boot management bliss
Stupid Boot Tricks: using ipxe and chef to get to boot management blissmacslide
 

What's hot (20)

Plack - LPW 2009
Plack - LPW 2009Plack - LPW 2009
Plack - LPW 2009
 
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9No callbacks, No Threads - Cooperative web servers in Ruby 1.9
No callbacks, No Threads - Cooperative web servers in Ruby 1.9
 
DevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and WebminDevOps tools for everyone - Vagrant, Puppet and Webmin
DevOps tools for everyone - Vagrant, Puppet and Webmin
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Integration using Apache Camel and Groovy
Integration using Apache Camel and GroovyIntegration using Apache Camel and Groovy
Integration using Apache Camel and Groovy
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга Свиридова
 
Keybase Vault Auto-Unseal HashiTalks2020
Keybase Vault Auto-Unseal HashiTalks2020Keybase Vault Auto-Unseal HashiTalks2020
Keybase Vault Auto-Unseal HashiTalks2020
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014
 
Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016Docker for PHP Developers - ZendCon 2016
Docker for PHP Developers - ZendCon 2016
 
Gruntwork Executive Summary
Gruntwork Executive SummaryGruntwork Executive Summary
Gruntwork Executive Summary
 
Using Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivityUsing Apache Camel connectors for external connectivity
Using Apache Camel connectors for external connectivity
 
Apache Camel - The integration library
Apache Camel - The integration libraryApache Camel - The integration library
Apache Camel - The integration library
 
Building real time applications with Symfony2
Building real time applications with Symfony2Building real time applications with Symfony2
Building real time applications with Symfony2
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for Development
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA Testers
 
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...Infrastructure as code: running microservices on AWS using Docker, Terraform,...
Infrastructure as code: running microservices on AWS using Docker, Terraform,...
 
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic ContentCaching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
Caching the Uncacheable: Leveraging Your CDN to Cache Dynamic Content
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language Instead
 
Stupid Boot Tricks: using ipxe and chef to get to boot management bliss
Stupid Boot Tricks: using ipxe and chef to get to boot management blissStupid Boot Tricks: using ipxe and chef to get to boot management bliss
Stupid Boot Tricks: using ipxe and chef to get to boot management bliss
 

Viewers also liked

Viewers also liked (6)

Carton CPAN dependency manager
Carton CPAN dependency managerCarton CPAN dependency manager
Carton CPAN dependency manager
 
Network Programming With Anyevent
Network Programming With AnyeventNetwork Programming With Anyevent
Network Programming With Anyevent
 
CPAN Realtime feed
CPAN Realtime feedCPAN Realtime feed
CPAN Realtime feed
 
Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012Wight: Phantom’s Perl friend - YAPC::Asia 2012
Wight: Phantom’s Perl friend - YAPC::Asia 2012
 
ZeroMQ in PHP
ZeroMQ in PHPZeroMQ in PHP
ZeroMQ in PHP
 
No Hugging, No Learning
No Hugging, No LearningNo Hugging, No Learning
No Hugging, No Learning
 

Similar to Deploying Plack Web Applications: OSCON 2011

Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Yuji Takayama
 
Joomla! Performance on Steroids
Joomla! Performance on SteroidsJoomla! Performance on Steroids
Joomla! Performance on SteroidsSiteGround.com
 
Nginx, PHP, Apache and Spelix
Nginx, PHP, Apache and SpelixNginx, PHP, Apache and Spelix
Nginx, PHP, Apache and SpelixHarald Zeitlhofer
 
What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24Jim Jagielski
 
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019Viktor Todorov
 
Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009sullis
 
Real-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsReal-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsStanislav Zozulia
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptnohuhu
 
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA RuntimesApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA RuntimesJean-Sebastien Delfino
 
Testing with Codeception
Testing with CodeceptionTesting with Codeception
Testing with CodeceptionJeremy Coates
 
Developing Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonDeveloping Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonSmartBear
 
PHP on Windows 2008
PHP on Windows 2008PHP on Windows 2008
PHP on Windows 2008jorke
 
Northeast PHP - High Performance PHP
Northeast PHP - High Performance PHPNortheast PHP - High Performance PHP
Northeast PHP - High Performance PHPJonathan Klein
 
State of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache BigtopState of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache BigtopGanesh Raju
 
Move out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternativesMove out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternativestzang ms
 

Similar to Deploying Plack Web Applications: OSCON 2011 (20)

Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012Movable Type 5.2 Overview at MTDDC 2012
Movable Type 5.2 Overview at MTDDC 2012
 
PSGI/Plack OSDC.TW
PSGI/Plack OSDC.TWPSGI/Plack OSDC.TW
PSGI/Plack OSDC.TW
 
Joomla! Performance on Steroids
Joomla! Performance on SteroidsJoomla! Performance on Steroids
Joomla! Performance on Steroids
 
Nginx pres
Nginx presNginx pres
Nginx pres
 
Nginx, PHP, Apache and Spelix
Nginx, PHP, Apache and SpelixNginx, PHP, Apache and Spelix
Nginx, PHP, Apache and Spelix
 
What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24What's New and Newer in Apache httpd-24
What's New and Newer in Apache httpd-24
 
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
The Recording HTTP Proxy: Not Yet Another Messiah - Bulgaria PHP 2019
 
Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009Web Services and Android - OSSPAC 2009
Web Services and Android - OSSPAC 2009
 
Get your teeth into Plack
Get your teeth into PlackGet your teeth into Plack
Get your teeth into Plack
 
Real-Time Web applications with WebSockets
Real-Time Web applications with WebSocketsReal-Time Web applications with WebSockets
Real-Time Web applications with WebSockets
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScript
 
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA RuntimesApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
ApacheCon NA 2010 - High Performance Cloud-enabled SCA Runtimes
 
Beyond Puppet
Beyond PuppetBeyond Puppet
Beyond Puppet
 
Testing with Codeception
Testing with CodeceptionTesting with Codeception
Testing with Codeception
 
Developing Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & PythonDeveloping Brilliant and Powerful APIs in Ruby & Python
Developing Brilliant and Powerful APIs in Ruby & Python
 
PHP on Windows 2008
PHP on Windows 2008PHP on Windows 2008
PHP on Windows 2008
 
Northeast PHP - High Performance PHP
Northeast PHP - High Performance PHPNortheast PHP - High Performance PHP
Northeast PHP - High Performance PHP
 
State of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache BigtopState of Big Data on ARM64 / AArch64 - Apache Bigtop
State of Big Data on ARM64 / AArch64 - Apache Bigtop
 
Crafting APIs
Crafting APIsCrafting APIs
Crafting APIs
 
Move out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternativesMove out from AppEngine, and Python PaaS alternatives
Move out from AppEngine, and Python PaaS alternatives
 

More from Tatsuhiko Miyagawa

More from Tatsuhiko Miyagawa (15)

cpanminus at YAPC::NA 2010
cpanminus at YAPC::NA 2010cpanminus at YAPC::NA 2010
cpanminus at YAPC::NA 2010
 
Asynchronous programming with AnyEvent
Asynchronous programming with AnyEventAsynchronous programming with AnyEvent
Asynchronous programming with AnyEvent
 
Remedie OSDC.TW
Remedie OSDC.TWRemedie OSDC.TW
Remedie OSDC.TW
 
Why Open Matters It Pro Challenge 2008
Why Open Matters It Pro Challenge 2008Why Open Matters It Pro Challenge 2008
Why Open Matters It Pro Challenge 2008
 
20 modules i haven't yet talked about
20 modules i haven't yet talked about20 modules i haven't yet talked about
20 modules i haven't yet talked about
 
Web::Scraper for SF.pm LT
Web::Scraper for SF.pm LTWeb::Scraper for SF.pm LT
Web::Scraper for SF.pm LT
 
Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8
 
Web::Scraper
Web::ScraperWeb::Scraper
Web::Scraper
 
XML::Liberal
XML::LiberalXML::Liberal
XML::Liberal
 
Test::Base
Test::BaseTest::Base
Test::Base
 
Hacking Vox and Plagger
Hacking Vox and PlaggerHacking Vox and Plagger
Hacking Vox and Plagger
 
Plagger the duct tape of internet
Plagger the duct tape of internetPlagger the duct tape of internet
Plagger the duct tape of internet
 
Tilting Google Maps and MissileLauncher
Tilting Google Maps and MissileLauncherTilting Google Maps and MissileLauncher
Tilting Google Maps and MissileLauncher
 
Writing Pluggable Software
Writing Pluggable SoftwareWriting Pluggable Software
Writing Pluggable Software
 
How we build Vox
How we build VoxHow we build Vox
How we build Vox
 

Recently uploaded

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

Deploying Plack Web Applications: OSCON 2011

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n