PSGI / Plackã«é¢ããäžé£ã®èšäºã®ç¶ãã ããªãã©ãŒã¯Starman PSGIãµãŒããŒã«ã€ããŠè©³ãã説æããŸããèšäºã®èè
ããã³ãžã£ãŒãã«
PragmaticPerl.comã®ç·šéé·ã®èš±å¯ãåŸãŠã å
ã®èšäºã¯
ããã«ãã
ãŸããã¹ã¿ãŒãã³ïŒ
ãã®ãµãŒããŒã®äœæè
ïŒå®®å·é圊ïŒã¯ã圌ã«ã€ããŠæ¬¡ã®ããã«è¿°ã¹ãŠããŸãã
ãã¹ã¿ãŒãã³ã®ååã¯ãæ¥æ¬ã®ããã¯ãã³ãããŠãã³ãŒã³ïŒã¯ãããŠãã³ãŒã³ïŒã«ããã¹ã¿ãŒHAç·ã®æã«ç±æ¥ããŠããŸãã ããŽã£ããã»ããŠã€ã«ã¯ãåãååã®æãã¹ã¿ãŒãã³ãããããŸããããã¯ãã«ã«ãæ¥æ¬ã®ã²ãŒã ãã¢ãŒã¹ããŠã³ããã®ãã£ã©ã¯ã¿ãŒã®ååãã¹ãŒããŒããªãªãã©ã¶ãŒãºã®é³æ¥œããŒãã®ååã§ãã
HTTPã®ãããªPerlã¢ãžã¥ãŒã«ã®åœåã«ããããããŠãã::ãµãŒããŒ:: PSGI ::æ¹æ³::ãã®::æžããããã®::ãš::äœ::ã¢ãžã¥ãŒã«ããããŠãã®çµæã人ã
ã¯ãããIRCã§HSPHIWWWMãšåŒã¶ã ããã¯ããŸãçºé³ããããåå¿è
ã«ã¯åé¡ãçããŸãã ã¯ããå€åç§ã¯èŠèœãšãã§ãã æéãçµãŠãŸããã
ååãæŽçãããŠããŸãã æ¬¡ã«ããµãŒããŒèªäœãæ±ããŸãã
ããªãã©ãŒã¯ïŒ
ã¹ã¿ãŒãã³ã®ããªãã©ãŒã¯ã¢ãã«ã¯ãæã匷åãªUnixãµãŒããŒã«äŒŒãŠããŸãã äºåå®è¡ããã»ã¹ã®ã¢ãã«ã䜿çšããŸãã ãŸããã¯ãŒã«ãŒã®ããŒã«ãèªåçã«åèµ·åãããŸã³ãããã»ã¹ãåé€ããŸãã
Plackã¢ããªã±ãŒã·ã§ã³
ä»åã¯ãPlackã¢ããªã±ãŒã·ã§ã³ã¯å®å
šã«åºæ¬çãªãã®ã«ãªããŸãã
use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; sub body { return 'body'; } sub body2 { return shift; } my $app = sub { my $env = shift; my $req = Plack::Request->new($env); my $res = $req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app = builder { mount "/" => builder { $app }; };
Starmanã§éçºããå Žåããã®äœæ¥ã®éåžžã«éèŠãªãã€ã³ããçè§£ããå¿
èŠããããŸãã ããšãã°ãããŒã¿ããŒã¹æ¥ç¶ãæ€èšããŠãã ããã å€ãã®å Žåãæéãšã³ãŒãã®è¡ãç¯çŽããããã«ãæ¥ç¶ã®åæåã¯ã¹ã¯ãªããã®æåã«è¡ãããŸãã ããã¯CGIã«é©çšãããFastCGIã«ãé©çšãããŸãã ããã¯PSGIã«ã¯åœãŠã¯ãŸããŸããã ãããŠãããã«çç±ããããŸãã ãµãŒããŒãèµ·åãããšããã®ã³ãŒãã¯ã¯ãŒã«ãŒããšã«1åã ãå®è¡ãããŸãã ãŸãããã®ç¶æ³ã®å±éºæ§ã¯ãæåã¯ãã¿ã€ã ã¢ãŠãã«ãã£ãŠæ¥ç¶ãã¯ã©ãã·ã¥ããããäœããã®çç±ã§ã¢ããªã±ãŒã·ã§ã³ãéåžžã©ããã«åäœããããšã§ãã éåæãµãŒããŒã®å Žåãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®æåã§æ¥ç¶ããŒã«ãåæåã§ããŸãïŒconnectionïŒ=æ¥ç¶ããŒã«ïŒã
ããã確èªãŸãã¯åè«ããããã«ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã倿ŽããŸãã ã€ã³ããŒãåŸãã³ãŒãã®å
é ã«æ¬¡ã®è¡ã远å ããŸãã
warn 'AFTER IMPORT';
ããã§ãã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn 'AFTER IMPORT'; sub body { return 'body'; } sub body2 { return shift; } my $app = sub { my $env = shift; my $req = Plack::Request->new($env); my $res = $req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app = builder { mount "/" => builder { $app }; };
å®éšã®çŽåºŠãé«ããããã«ã次ã®ã³ãã³ãã䜿çšããŠ1人ã®ã¯ãŒã«ãŒã§starmanãå®è¡ããŸãã
starman --port 8080 --workers 1 app.psgi
app.psgiã¯ã¢ããªã±ãŒã·ã§ã³ã§ãã
èµ·åãå®äºãããšããã«ãSTDERRã«æ¬¡ã®ç»åã衚瀺ãããŸãã
noxx@noxx-inferno ~/perl/psgi $ starman --port 8080 app.psgi --workers 1 2013/06/02-15:05:31 Starman::Server (type Net::Server::PreFork) starting! pid(4204) Resolved [*]:8080 to [::]:8080, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 8080 on host :: with IPv6 Setting gid to "1000 1000 4 24 27 30 46 107 125 1000 1001" AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7.
localhostïŒ8080 /ã«ãªã¯ãšã¹ããéä¿¡ãããšãSTDERRã«æ°ãããã®ãäœã衚瀺ãããããµãŒããŒãæ£åžžã«å¿çããŠããããšã確èªã§ããŸãã
ã¯ãŒã«ãŒãå®éã«1ã§ããããšã確èªããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
ps uax | grep starman
çµæïŒ
noxx 4204 0.6 0.1 57836 11264 pts/3 S+ 15:05 0:00 starman master --port 8080 app.psgi --workers 1 noxx 4205 0.2 0.1 64708 13164 pts/3 S+ 15:05 0:00 starman worker --port 8080 app.psgi --workers 1 noxx 4213 0.0 0.0 13580 940 pts/4 S+ 15:05 0:00 grep --colour=auto starman
2ã€ã®ããã»ã¹ããããŸãã ããããå®éã«ã¯åŽåè
ã¯ãã®ãã¡ã®1人ã«ãããŸããã å¥ã®å®éšãããŠã¿ãŸãããã 3人ã®åŽåè
ã§ã¹ã¿ãŒãã³ãå®è¡ããŸãã
starman --port 8080 --workers 3 app.psgi
çµæïŒ
2013/06/02-15:11:08 Starman::Server (type Net::Server::PreFork) starting! pid(4219) Resolved [*]:8080 to [::]:8080, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 8080 on host :: with IPv6 Setting gid to "1000 1000 4 24 27 30 46 107 125 1000 1001" AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7.
ããã£ãã æ¬¡ã«ãããã»ã¹ã®ãªã¹ããèŠãŠã¿ãŸãããã ç§ã«ãšã£ãŠã¯ãã®ããã«èŠããŸãïŒ
noxx 4219 0.1 0.1 57836 11264 pts/3 S+ 15:11 0:00 starman master --port 8080 app.psgi --workers 3 noxx 4220 0.0 0.1 64460 12756 pts/3 S+ 15:11 0:00 starman worker --port 8080 app.psgi --workers 3 noxx 4221 0.0 0.1 64460 12920 pts/3 S+ 15:11 0:00 starman worker --port 8080 app.psgi --workers 3 noxx 4222 0.0 0.1 64460 12756 pts/3 S+ 15:11 0:00 starman worker --port 8080 app.psgi --workers 3 noxx 4224 0.0 0.0 13580 936 pts/4 S+ 15:12 0:00 grep --colour=auto starman
ãã¹ã¿ãŒ1人ãã¯ãŒã«ãŒ3人ã
å®è¡é åºãææ¡ããŸããã æ¬¡ã«ãå¥ã®èŠåã远å ããŸãã
warn 'IN BUILDER'
ã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn 'AFTER IMPORT'; sub body { return 'body'; } sub body2 { return shift; } my $app = sub { my $env = shift; my $req = Plack::Request->new($env); my $res = $req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app = builder { warn 'IN BUILDER'; mount "/" => builder { $app }; };
1ã€ã®ã¯ãŒã«ãŒããã»ã¹ã®å Žåãåºåã¯æ¬¡ã®ããã«ãªããŸãïŒéå§ã³ãã³ãïŒstarman --port 8080 --workers 1 app.psgiïŒïŒ
2013/06/02-17:33:27 Starman::Server (type Net::Server::PreFork) starting! pid(4430) Resolved [*]:8080 to [::]:8080, IPv6 Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6 Binding to TCP port 8080 on host :: with IPv6 Setting gid to "1000 1000 4 24 27 30 46 107 125 1000 1001" AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 23.
3ã€ã®ã¯ãŒã«ãŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšãSTDERRã«æ¬¡ã®å³ã衚瀺ãããŸãã
AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 23. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 23. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 23.
localhostïŒ8080 /ã«ãªã¯ãšã¹ããéä¿¡ããããšã«ãããSTDERRã«æ°ãããã®ãäœã衚瀺ãããªãããšãç°¡åã«ç¢ºèªã§ããŸãã
次ã®çµè«ãåºãããšãã§ããŸãã
ãã®ã¢ã¯ã·ã§ã³
㯠ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæã«å®è¡ãããŸãã ããã¯ãã¹ã¯ãªããã®éå§ãšãååšããå Žåã¯ãã«ããŒã»ã¯ã·ã§ã³ã®äž¡æ¹ã«åœãŠã¯ãŸããŸãã
ãã®ã¢ã¯ã·ã§ã³
㯠ããµãŒããŒèŠæ±
ã§ã¯å®è¡ãã
ãŸãã ã
Starmanã¯ãŒã¯ãããŒã¯é çªã«éå§ãããŸãã
ããã«ãããã¹ã¯ãªããã®éå§æãšãã«ããŒéšåã®äž¡æ¹ã§éããªããžã§ã¯ããæ§ç¯ã§ããŸãã
ãããŠã次ã®åœ¢åŒã®å¥ã®èŠåãã³ãŒãã«è¿œå ããŸãããã
warn 'REQUEST';
ãããŠãã¢ããªã±ãŒã·ã§ã³ã次ã®ãã©ãŒã ã«æã£ãŠãããŸãããã
use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn 'AFTER IMPORT'; sub body { return 'body'; } sub body2 { return shift; } my $app = sub { warn 'REQUEST'; my $env = shift; my $req = Plack::Request->new($env); my $res = $req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app = builder { warn 'IN BUILDER'; mount "/" => builder { $app }; };
1ã€ã®ã¯ãŒã¯ãããŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãïŒstarman --port 8080 --workers 1 app.psgiïŒã ãããŸã§ã®ãšããäœãå€ãã£ãŠããŸããã
AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 24.
ãã ããSTDERRã«æ°ãããšã³ããªã衚瀺ãããããªã¯ãšã¹ãããããšã¯äŸ¡å€ããããŸãã
REQUEST at /home/noxx/perl/psgi/app.psgi line 16.
ãŸãšãããšã starmanãžã®åãªã¯ãšã¹ãã§ã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®ã³ãŒãã®ã¿ãå®è¡ãããŸãïŒreturn sub ...ãèŠããŠãã䟡å€ããããŸãïŒããèµ·åæã«ãã®ã³ãŒãã¯å®è¡ãããŸããã
ãããŠä»ãäžã€ã®ããã»ã¹ãèœã¡ããšããŸãããã sub ...ãè¿ã次ã®è¡ã远å ããŸãã
die("DIED");
ãã®çµæã次ã®åœ¢åŒã®ã¢ããªã±ãŒã·ã§ã³ãååŸããå¿
èŠããããŸãã
use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn 'AFTER IMPORT'; sub body { return 'body'; } sub body2 { return shift; } my $app = sub { warn 'REQUEST'; my $env = shift; my $req = Plack::Request->new($env); my $res = $req->new_response(200); $res->body(body()); die("DIED"); return $res->finalize(); }; my $main_app = builder { warn 'IN BUILDER'; mount "/" => builder { $app }; };
1ã€ã®ã¯ãŒã¯ãããŒã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããªã¯ãšã¹ããè¡ããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯èªç¶ã«ã¯ã©ãã·ã¥ããŸãã ããããçµæã¯å¥åŠã§ãããè«ççã§ãã ã¢ããªã±ãŒã·ã§ã³ã¯ã¯ã©ãã·ã¥ãããSTDERRã«ã¯2ã€ã®éç¥ã®ã¿ã衚瀺ãããŸããã
REQUEST at /home/noxx/perl/psgi/app.psgi line 16. DIED at /home/noxx/perl/psgi/app.psgi line 21.
ãã€ã亀æããŸãïŒãDIEDãïŒã 1çªåºå£ã§ã Starmanãå®è¡ããlocalhostïŒ8080 /ã«ãªã¯ãšã¹ããéä¿¡ããŸãã ã¯ãŒã¯ãããŒã¯èœã¡ãŸããã ããã¯STDERRããèŠãããšãã§ããæ¬¡ã®ããã«ãªããŸãã
REQUEST at /home/noxx/perl/psgi/app.psgi line 16, <$read> line 7. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7, <$read> line 8. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 26, <$read> line 8.
åãªã¯ãšã¹ãã®åŸãã¯ãŒã¯ãããŒã¯èœã¡ãŸããããã¹ã¿ãŒããã»ã¹ã¯ãããäžããŸãã
ãã°ããã¹ã¿ãŒãã³ãé¢ããã ããšãã°ãTwiggyã®äžã§ãã®ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠã¿ãŸãããã ãã®ãµãŒããŒãã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ãã€ã³ã¹ããŒã«ããŸãã ããã±ãŒãžã¯TwiggyãšåŒã°ããŸãã
Twiggyãã€ã³ã¹ããŒã«ããããæ¬¡ã®ã³ãã³ãã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
twiggy --port 8080 app.psgi
ãããŠããªã¯ãšã¹ããè¡ããŸãã 1ã€ã®æ©èœãé€ãããã¹ãŠã¹ã¿ãŒãã³ã«äŒŒãŠããŸãã ãµãŒããŒãèœã¡ãŸããã
noxx@noxx-inferno ~/perl/psgi $ twiggy --port 8080 app.psgi AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 26. REQUEST at /home/noxx/perl/psgi/app.psgi line 16, <> line 5. noxx@noxx-inferno ~/perl/psgi $
ãã¡ãããããã¯Twiggyã«ã¯ãã¹ã¿ãŒããã»ã¹ããªããåããã¯ãŒã«ãŒãè²ãŠã人ãããªãããã§ãã ãããŠãããããéåžžã«éèŠãªç¹ãç¶ããŸãããããèæ
®ã«å
¥ããªããã°ãªããŸããã ãµãŒããŒãåèµ·åããåã«ãã³ãŒããæ£ãããæ§æãšã©ãŒãå«ãŸããŠããªãããšã確èªããå¿
èŠããããŸãã Starmanã䜿çšããŠãšã©ãŒãå«ãã¢ããªã±ãŒã·ã§ã³ãèµ·åããããšãããšãããã€ãã®ã€ãã³ããæ¬¡ã®é åºã§çºçããŸãã
- ã¹ã¿ãŒãã³ã¯ãã¹ã¿ãŒããã»ã¹ãéå§ããã¯ãŒã¯ãããŒãéå§ã§ãããã©ããã確èªããŸãã
- Starmanã¯ã¯ãŒã¯ãããŒãéå§ããã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®è¡ã«æž¡ããŸãã
- ã¯ãŒã¯ãããŒãèœã¡å§ãããã¹ã¿ãŒãããããæŸãå§ããŸãã
- è² è·ã¯éåžžã«çæéã§å¢å ããŸãã
å®è¡æãšã©ãŒã¯ããã»ã©é倧ã§ã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ãããããããåé€ããŠãã»ãŒåæç¶æ
ã«æ»ããŸãããã
use strict; use warnings; use Plack; use Plack::Builder; use Plack::Request; warn 'AFTER IMPORT'; sub body { return 'body'; } sub body2 { return shift; } my $app = sub { warn 'REQUEST'; my $env = shift; my $req = Plack::Request->new($env); my $res = $req->new_response(200); $res->body(body()); return $res->finalize(); }; my $main_app = builder { warn 'IN BUILDER'; mount "/" => builder { $app }; };
ãããŠããã®é åºã§æ¬¡ã®ããšã詊ããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ãå
ã®åœ¢åŒã«ããŸãã
- Starmanã䜿çšããŠå®è¡ããŸãã
- ãªã¯ãšã¹ããããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã倿ŽããŠä¿åããŸãã
- ã¢ããªã±ãŒã·ã§ã³ãåèµ·åããã«ãå床ãªã¯ãšã¹ããè¡ããŸãã
çµæïŒ
curl localhost:8080/ body
ã¢ããªã±ãŒã·ã§ã³ãä¿åããæ¬äœæ©èœã倿ŽããŸãã ããã§ãããšãã°ã誰ãè¿ããªããšããŸãã èŠæ±ãè¡ããŸã-ãµãŒããŒãåèµ·åããªãã£ãå Žåã®çµæã¯æ¬¡ã®ãšããã§ãã
curl localhost:8080/ body
ãã ãããã¹ãŠã倿Žããããããåèµ·åãã䟡å€ããããŸãã
curl localhost:8080/ nobody
å¥ã®éèŠãªçµè«ã ã¢ããªã±ãŒã·ã§ã³ãæŽæ°ããã«ã¯ããã¡ã€ã«ã倿Žããã ãã§ã¯äžååã§ãã ãµãŒããŒãåèµ·åããå¿
èŠããããŸãã ãŸãã¯ããã¹ã¿ãŒããã»ã¹ã«ç¹å¥ãªã·ã°ãã«ãéä¿¡ããŸãã
ã¹ã¿ãŒãã³ãšä¿¡å·
忢ã§ããªãå€§èŠæš¡ãªPSGIã¢ããªã±ãŒã·ã§ã³ããããšæ³åããŠãã ããã ã¡ã¢ãªã«ããŒãããããªãéãã©ã€ãã©ãªãããšãã°10ç§ããããŸãã
åã®äžé£ã®ã¢ã¯ã·ã§ã³ãç¹°ãè¿ããŸããã1ã€ã®å€æŽããããŸãã ä¿¡å·ã®éä¿¡ã远å ããŸãã
åèªããããã«ã¹ã¿ãŒãã³ã«äŒããä¿¡å·ã¯SIGHUPã§ãã
ãã®ä¿¡å·ãéä¿¡ããã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
kill -s SIGHUP [pid]
次ã®ã³ãã³ãã§pidå€ãååŸã§ããŸãã
ps uax | grep starman | grep master
ã³ãã³ãåºåã®äŸïŒ
noxx 6214 0.8 0.1 54852 10288 pts/3 S+ 19:17 0:00 starman master --port 8080 --workers 1 app.psgi
pid = 6214ã
èŠæ±ãšå¿çã確èªããŠãã ããã 誰ãbodyã«æ»ããŠã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸããã
çµæïŒ
curl localhost:8080 body kill -s SIGHUP 6214 curl localhost:8080 nobody
äžæ¹ãSTDERR Starmanã§ã¯æ¬¡ã®ããšãããããŸãã
AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 24. REQUEST at /home/noxx/perl/psgi/app.psgi line 16. Sending children hup signal AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7, <$read> line 2. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 24, <$read> line 2. REQUEST at /home/noxx/perl/psgi/app.psgi line 16, <$read> line 2.
ãããã£ãŠãPSGIã¢ããªã±ãŒã·ã§ã³ãæŽæ°ããã«ã¯2ã€ã®æ¹æ³ããããŸãã ã©ã¡ããéžæãããã¯ãã¿ã¹ã¯ã«ãã£ãŠç°ãªããŸãã
å¥ã®ã¯ãŒã¯ãããŒãå¿
èŠã ãšããŸãã 2ã€ã®æ¹æ³ã§è¿œå ã§ããŸãã å¿
èŠãªãã©ã¡ãŒã¿ãŒïŒ--workersïŒã䜿çšããŠãµãŒããŒãåå§åããããã·ã°ãã«ãéä¿¡ããŸãã 1ã€ã®ã¯ãŒã¯ãããŒã远å ããã·ã°ãã«ã¯TTINã§ãããåé€ããã·ã°ãã«ã¯TTOUã§ãã ãµãŒããŒãå®å
šã«å®å
šã«åæ¢ãããå Žåã¯ãQUITã·ã°ãã«ã䜿çšã§ããŸãã
ã ããã 1ã€ã®ã¯ãŒã¯ãããŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
starman
次ã«ã次ã®ã³ãã³ãã2åå®è¡ããŠ2ã€ã®ããã»ã¹ã远å ããŸãã
kill -s TTIN 6214
ã¹ã¿ãŒãã³ããã»ã¹ãªã¹ãïŒ
noxx 6214 0.0 0.1 54852 10304 pts/3 S+ 19:17 0:00 starman master --port 8080 --workers 1 app.psgi noxx 6221 0.0 0.1 64724 13188 pts/3 S+ 19:19 0:00 starman worker --port 8080 --workers 1 app.psgi noxx 6233 0.0 0.1 64476 12872 pts/3 S+ 19:26 0:00 starman worker --port 8080 --workers 1 app.psgi noxx 6239 2.0 0.1 64480 12872 pts/3 S+ 19:29 0:00 starman worker --port 8080 --workers 1 app.psgi
STDERRã¯ãã§ã«ããªãã¿ã§ãïŒ
AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7, <$read> line 4. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 24, <$read> line 4. AFTER IMPORT at /home/noxx/perl/psgi/app.psgi line 7, <$read> line 4. IN BUILDER at /home/noxx/perl/psgi/app.psgi line 24, <$read> line 4.
次ã«ã1ã€ã®ããã»ã¹ãåé€ããŸãã
kill -s TTOU 6214
ããã»ã¹ã®ãªã¹ããèŠããšãããŒã ã广ãäžããŠããããšãããããŸãã
noxx 6214 0.0 0.1 54852 10304 pts/3 S+ 19:17 0:00 starman master --port 8080 --workers 1 app.psgi noxx 6221 0.0 0.1 64724 13188 pts/3 S+ 19:19 0:00 starman worker --port 8080 --workers 1 app.psgi noxx 6233 0.0 0.1 64476 12872 pts/3 S+ 19:26 0:00 starman worker --port 8080 --workers 1 app.psgi noxx 6238 0.0 0.0 13584 936 pts/4 S+ 19:29 0:00 grep --colour=auto starman
ãã ããSTDERRã§ã¯ããã¯è¡šç€ºãããŸããã
ãããŠãQUITã·ã°ãã«ãéä¿¡ããããšã«ãããã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ãå®äºããŸãã
kill -s QUIT 6214
ãµãŒããŒã¯STDERRã«æžã蟌ã¿ãŸãã
2013/06/02-19:32:15 Received QUIT. Running a graceful shutdown Sending children hup signal 2013/06/02-19:32:15 Worker processes cleaned up 2013/06/02-19:32:15 Server closing!
ã·ã£ããããŠã³ããŸãã
Starmanã«ã€ããŠç¥ãå¿
èŠãããã®ã¯ããã ãã§ãã
å¥ã®éèŠãªè©³çŽ°ãæ®ã£ãŠããŸãã Starmanãèµ·åãããšã-Mã¹ã€ããã䜿çšããŠå¿
èŠãªã¢ãžã¥ãŒã«ãæå®ãããã¹ã¿ãŒããã»ã¹ãèµ·åã§ããŸãã ãããããã®åŸã次ã®å¶éãæ©èœãå§ããŸãã -MïŒ-MDBI -MDBIx :: ClassïŒãä»ããŠããŒããããã¢ãžã¥ãŒã«ã¯ãSIGHUPã§åèªã¿èŸŒã¿ãããŸããã
å¥ã®äŸ¿å©ãªãµãŒããŒãªãã·ã§ã³ã¯-Iã§ãã ãã¹ã¿ãŒããã»ã¹ãéå§ããåã«ãPerlã¢ãžã¥ãŒã«ãžã®ãã¹ãæå®ã§ããŸãã Starmanã¯Unixãœã±ããã§ãåäœããŸããããã®æ©èœã«ã€ããŠã¯ãPlackã®å±éãšç®¡çã«é¢ããèšäºããå§ããŠã次ã®èšäºã§è©³ãã説æããŸãã
ãããŠæåŸã«ãç°å¢å€æ°ïŒPLACK_ENVïŒãæž¡ãããç¶æ
ã«èšå®ãã-Eãã©ã°ã
次ã®èšäºã§ã¯ãéåæPSGIãµãŒããŒ-TwiggyãåãäžããŸãã
ããããªãŒã»ã·ã£ãããªã³