mod_perl 2.0.2 ã¸ã®ãã¤ã°ã¬ã¼ã·ã§ã³
mod_perl 2 ã Stable ãªãªã¼ã¹ã«ãªã£ã¦æ°ãã¤ãã°å年以ä¸çµã£ãæ§åãã¯ã¦ãªã§ã¯ããã¾ã§ mod_perl 2 㯠mod_perl 2.0RC-4 (1.99) ã¨ãã使ã£ã¦ã¾ããããã¼ã¡ã¼ã¡ 2.0 ã«ã¡ããã¨ç§»è¡ããæ¹ãããããªã¨ãéãè °ãä¸ãã¤ã¤ä½æ¥ãã¦ã¾ãã
ç¾å¨ãmod_perl ã«ã¯äºææ§ã®ãªãä¸ã¤ã®ãã¼ã¸ã§ã³ãåå¨ãã¦ã¾ãã
1.0 㯠Apache 1.3 ã® API ã«å¯¾å¿ãã¦ãã mod_perlã1.99 㨠2.0 㯠Apache 2.0 API ã«å¯¾å¿ãã¦ãã mod_perl ã§ããApache 2.0 ãããã¾ã§ã®ãã¼ã¸ã§ã³ã¨ã® API ã®äºææ§ãæ¨ã¦ã¦ã¢ã¼ããã¯ãã£ã®è¦ç´ããè¡ãããã®ããã£ããã«ãmod_perl ã徿¹äºææ§ãæ¨ã¦ã¦ã¹ã¯ã©ããããæ¸ãç´ãããçµæã®ç£ç©ã§ãã
1.99 ã¨ããã®ã¯ãmod_perl 2.0 ã Stable ãªãªã¼ã¹ãããç´åã¾ã§ã®ãã¼ã¸ã§ã³ã§ãè¨ããªãã°ãã¼ã¿çããã¼ã¿ãåããã¨ãã«ããã¤ãã® API ã夿´ã«ãªã£ãããåå空éã Apache ãã Apache2 ã«å¤æ´ããããã¨ãã£ãçµç·¯ããã£ã¦ããã®ä¸¡è ã¯ã ãããåããªãã ãã©äºææ§ãããã¾ããããªã®ã§ã1.99 ã使ã£ã¦ãã¢ããªã±ã¼ã·ã§ã³ãåãã¦ããµã¼ãã¼ã 2.0 ã«ã¢ãããã¼ãããã¨ãã®ã¢ããªã±ã¼ã·ã§ã³ã¯åããªããªã£ã¦ãã¾ãã¾ãã
ä¾ãã° Catalyst ã¨ã㯠Catalyst-Engine-Apache ã®ä¸ã§ãMP19ãMP20ãMP13 ã¨ä¸ã¤ã® Engine ãç¨æãã¦ãã®å·®ç°ãå¸åãã¦ããããã¾ãã
ãã¦ãã¿ãªãããåãã® CGI.pm ã¯ãCGI ã¨ããååã®å²ã«ã¯ mod_perl ã§åã㨠mod_perl ã® API ã使ã£ããããããã«ã½ã¼ã¹ãæ¸ããã¦ãããã§ããããã®ææ°çã«ã¯
if (exists $ENV{MOD_PERL}) { # mod_perl handlers may run system() on scripts using CGI.pm; # Make sure so we don't get fooled by inherited $ENV{MOD_PERL} if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2) { $MOD_PERL = 2; require Apache2::Response; require Apache2::RequestRec; require Apache2::RequestUtil; require Apache2::RequestIO; require APR::Pool; } else { $MOD_PERL = 1; require Apache; } }
ã¨ããã³ã¼ããããã¾ããmod_perl ã®ãã¼ã¸ã§ã³ãè©ä¾¡ãã¦ã対å¿ãããã¼ã¸ã§ã³ã®ã¢ã¸ã¥ã¼ã«ããã¼ããã¦ãã¾ããããããCatalyst ã®å ´åã¨ã¯éã£ã¦ 1.99 ã«ã¯å¯¾å¿ãã¦ããã¦ã¾ãããå°ãã¾ãã®ãã¼ã¸ã§ã³ã¾ã§ã¯ 1.0 㨠1.99 ã«å¯¾å¿ããã³ã¼ãã«ãªã£ã¦ã¾ããããããæè¿ã®ã¢ãããã¼ãã§ä¸è¨ã®ã³ã¼ãã«å ¥ãæ¿ããã¾ããããªã®ã§ãCGI.pm ã使ã£ã¦ã mod_perl 1.99 ãªã³ã¼ãã¯ãCGI.pm ã®ãã¼ã¸ã§ã³ã¢ããã¨å ±ã«åããªããªã£ã¦ãã¾ãã¨ããç½ ããã£ãããã¾ãã
1.99 㯠mod_perl ã®ãµã¤ãã«ãã¦ã³ãã¼ãã®ãªã³ã¯ããªããããã® CGI.pm ã®äºæ ãªã©ãè¦ãã«ããããã¾ããããå æ¸ 2.0 使ãããªã£ã¦ããéçºã³ãã¥ããã£ã®æåãªã®ããªãã¨ããæãããã¦ã2.0.2 ã¸ç§»è¡ãããã¨ä½æ¥ããã¦ããã¨ããããã§ããã¾ããã¤ãã§ãªã®ã§ãCGI.pm ã¨ã使ã£ã¦ãæªããç¿æ £ããã㦠Apache2::Request ã使ãããã«ã¨ããã¬ã¼ã ã¯ã¼ã¯ã®æ¹è¯ããã¦ã¾ãã
ãã¦ããã使¥ãããã¨æã£ãããã§ããå®ã¯å㯠mod_perl API ãç´æ¥ä½¿ãã¨ã㯠1.0 ã°ããããã£ã¦ã¦ã mod_perl 2.0 ã«ã¯ããã¾ã詳ãããªããã©ãã¬ã¼ã ã¯ã¼ã¯ãæ½è±¡åãã¦ããã¦ãã®ããããã¨ã«ãã®è¾ºããããªãã«ãªã£ã¦ãã¾ãããã®ã§ãã®æ£æã«ãã®è¾ºãã®ããã¥ã¡ã³ããæ¼ã£ã¦ãã¾ããã
1.0 â 2.0 ã§ã¯ãããã»ã©å¤§ããå¤ãã£ã¦ããªãã¦è¦å´ã¨ããã»ã©ã®ãã®ã¯ãªãã£ãã®ã§ããã1.0 ã®ã¨ãã¨åãããªã§ãã£ã¦ãã¨ã¯ã¾ã£ããããç®æã¯ãã£ã±ãããã¾ããä¾ãã° 1.0 ã®ã¨ãã¯
package Sandbox::Hello; use strict; use warnings; use Apache::Constants qw(OK); sub handler ($$) { my ($class, $r) = @_; $r->send_http_header('text/html'); $r->print('Hello, World!'); return OK; } 1;
ã¨ãå²ã¨æ·±ããã¨ãèããªãã¦ã handler() ãå®ç¾©ã㦠$r
ã® API ã使ã£ã¦çµäºã¨ããå
·åã§ããã 2.0 ã§ã¯ $r
ã«ç¸å½ãããªãã¸ã§ã¯ãã®ã¡ã½ãããè¤æ°ã®ã¢ã¸ã¥ã¼ã«ã«åæ£ãã¦ãã¦ããã®å¯¾å¿ãã¾ãææ¡ããå¿
è¦ãããã¾ãã
- Apache2::RequestIO
- Apache2::RequestRec
- Apache2::RequestUtil
- Apache2::Server
- Apache2::ServerUtil
ãã®è¾ºãããããã®ã¢ã¸ã¥ã¼ã«ããã¼ãããã¨ã$r
ã§æ±ãã API ãå¢ããã®ã§ãããã使ã£ã¦ããã°ã©ãã³ã°ãã¦ããã¾ãããã¨ãsend_http_header
ããªããªã£ã¦ãã¨ããOO ã§ãã³ãã©ãæ¸ããããã° attribute ã§ method ãæå®ããªããã¨ãã¨ããç´°ãã夿´ãããã¾ããçµæ Hello, World ã¯
package Sandbox::Hello; use strict; use warnings; use Apache2::ReqeustRec(); use Apache2::RequestIO(); use Apache2::Const -compile => 'OK'; sub handler : method { my ($class, $r) = @_; $r->content_type('text/plain'); $r->print('Hello, World!'); return Apache2::Const::OK; } 1;
ã¨ããæ¡é ã«ãªãã¾ãã
ãã®ã¡ã½ããã®å¤æ´ã¨ããææã®ã¡ã½ãããã©ãã®ã¢ã¸ã¥ã¼ã«ã«å®ç¾©ããã¦ããã¨ã㯠ModPerl::MethodLookup
ã使ã£ã¦èª¿ã¹ãããããã«ãªã£ã¦ãã¦
$ perl -Mmod_perl2 -MModPerl::MethodLookup -e print_method send_http_header 'send_http_header' is not a part of the mod_perl 2.0 API use 'content_type' instead. To use method 'content_type' add: use Apache2::RequestRec ();
ãããªæãã§ã³ãã³ãã©ã¤ã³ããé½åº¦èª¿æ»ãã¤ã¤ãã¤ã°ã¬ã¼ã·ã§ã³ãã¦ããå½¢ã«ãªãã¾ããã¡ãªã¿ã«ãAPI ã¨ã¢ã¸ã¥ã¼ã«ã®å¯¾å¿ã¨ãããã©ãããã£ãã startup.pl ã§
use ModPerl::MethodLookup; ModPerl::MethodLookup->preload_all_modules();
ã¨ãããã¨ãã§ãã¾ãã
The function preload_all_modules() preloads all mod_perl 2.0 modules, which implement their API in XS. This is similar to the mod_perl 1.0 behavior which has most of its methods loaded at the startup.
ã ããã§ãã
ã¨ããå ·åã§ã¼ã¡ã¼ã¡ãã£ã¦ãæ¢åã®ã¢ããªã±ã¼ã·ã§ã³ã¯ã ãããåãããã«ãªãã¾ããã
ããã§ mod_perl 2 ã§è¿½å ãããæ©è½ãä¾ãã°(Apache::Filter ã¨ã使ããªãã§ãOKãª)I/O ãã£ã«ã¿ãªã³ã°ããã³ãã©ã®ããã¯ç®æã®æå®æ©è½ã¨ããå®å¿ãã¦ä½¿ãããããµã¼ãã¼ãã¢ã¸ã¥ã¼ã«ã®ãã¼ã¸ã§ã³ã¢ããã«ãæ°ãé£ããªãã¦æ¸ã¿ããã§ããprefork 㨠worker ã§ã©ããããå·®ãã§ããã®ãã³ããã¼ã¯ã¨ãããã£ã¦ã¿ããã