PSGI/Plackに挑戦
CGI/FastCGIの仕組みがわかり、ようやくPlackにチャレンジ。
インストール
これでPlack関連のモジュールをまとめてinstallできる。
cpanm Task::Plack
Hello PSGI!
まずはPSGIの基本形をやろう、ということで以下のコードリファレンスをhello.psgiとして保存。
use strict; my $app = sub { my $env = shift; return [ 200, [ 'Content-Type' => 'text/plain' ], [ "Hello PSGI!" ], ]; };
これをplackupすると、PSGIアプリケーションが起動する。HTTPサーバは指定してないのでHTTP::Server::PSGIが自動的に選ばれた。
kotaro@mdev1:~> plackup psgi/hello.psgi HTTP::Server::PSGI: Accepting connections at http://0:5000/
http://localhost:5050/にアクセスすると、「Hello PSGI!」と表示される
Hello PSGI with FastCGI
今度はFastCGIをサーバにして、PSGIアプリを動かしてみる。
FastCGIはExternalにし、Unixドメインソケットを通して、PSGIアプリとやり取りする。
FastCgiExternalServer /var/www/html/hello.fcgi -socket hello.sock
- plackup
kotaro@mdev1:~> plackup -s FCGI --listen /var/log/httpd/fastcgi/hello.sock psgi/hello.psgi
Unixドメインソケットがlistenになってるか調べると、確かにlistenステータス。
kotaro@mdev1:~> netstat --unix -l | grep hello.sock unix 2 [ ACC ] STREAM LISTENING 111707 /var/log/httpd/fastcgi/hello.sock
この状態で、http://localhost/hello.fcgi/にアクセスすれば、「Hello PSGI!」と表示された。
一度理解すれば大したことじゃないけど、辿り着くにはだいぶ時間かかりました。。
サーバプロセス数を増やす
Plack::Handler::FCGIのSYNOPSISみてたら、--nprocオプションが使えるみたい
kotaro@mdev1:~> plackup -s FCGI --listen /var/log/httpd/fastcgi/hello.sock psgi/hello.psgi --nproc 5 FastCGI: manager (pid 13481): initialized FastCGI: server (pid 13482): initialized FastCGI: manager (pid 13481): server (pid 13482) started FastCGI: server (pid 13483): initialized FastCGI: manager (pid 13481): server (pid 13483) started FastCGI: server (pid 13484): initialized FastCGI: manager (pid 13481): server (pid 13484) started FastCGI: manager (pid 13481): server (pid 13485) started FastCGI: server (pid 13485): initialized FastCGI: server (pid 13486): initialized FastCGI: manager (pid 13481): server (pid 13486) started