トップページ⇒php
1001コメント343KB

mod_perlを使おう!

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん01/11/07 17:42ID:+Gux2iOQ
CGIを激速で実行できるmod_perlについて語りませう。
関連リンク等は>2
0039名無しさん@お腹いっぱい。01/12/11 14:24ID:QvfYRs1F
Apache/1.3.22 (Win32)にmod_perl入れようということで
ソース落としてきたんですけど、makefile.pl実行してもmod_perl.makはみつからないし
makefileはnmakeで通らないしと、なんかおかしいです なんかファイル足らんのかなぁ?
つーかWin32バイナリってどっかにないですかね?
0040抹茶 ◆RojWUtWg 01/12/11 14:58ID:???
なるほど、ちょっと解説サイトを色々見てみたけど
mod_perlという代物はそれほど難しいというわけでもなさそうだ。
0041名無しさん@お腹いっぱい。01/12/11 15:17ID:ebIAeWdW
>>39
PPMでインストールできたと思うよ。
http://apache.perl.org/distributions.html
0042名無しさん@お腹いっぱい。01/12/11 20:43ID:ebIAeWdW
>>40
既存のスクリプトをPerlRunやApacheRegistryで動かす分には
殆ど変更は必要ない。

だけど、やっぱApache::*なモジュールをつくるのが
面白いYo!
0043名無しさん@お腹いっぱい。01/12/11 21:46ID:ORPF/X5f
modperl-mlで出てた。Win32へのmod_perlインストール手順だとさ

http://www.gihyo.co.jp/wdpress/correctVol1_Perl.html
0044のーとりあすびっぐ01/12/13 20:30ID:BEbOFXi+
suexec が使える mod_perl みたいなのってないですかね。
suexec っていうぐらいだから 毎回 exec しなきゃいけないんだろうけど。
うーむ。
0045名無しさん@お腹いっぱい。01/12/13 23:09ID:???
>>44
別portで別uidのapacheを動かしておいて、
ProxyPass /path/to/vdir/ http://localhost:port/hogehoge/
ProxyPassReverse /path/to/vdir/ http://localhost:port/hogehoge/
みたいな感じでメインのapacheの一部に見えるようにするってのはどうよ。
0046名無しさん@お腹いっぱい。01/12/16 22:54ID:???
#!/usr/bin/perl
use CGI;
$q = new CGI;
print $q->header;
print "Hello, world\n";
をCGI、Apache::Registry、Apache::PerlRunで動かしてab -c10 -n1000してみた。
環境はPentium II 400MHz、メモリ512MB、FreeBSD 4.4-STABLE。

CGI
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 7 67.3 0 1181
Processing: 171 1735 429.2 1738 3010
Waiting: 166 1729 430.0 1733 3005
Total: 171 1742 430.7 1745 3130

Apache::Registry
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 18 11.0 18 133
Processing: 24 25 11.9 25 144
Waiting: 5 21 11.5 20 139
Total: 33 44 10.6 43 148

Apache::PerlRun
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 1 16 12.8 15 197
Processing: 28 35 45.2 30 1006
Waiting: 4 30 44.4 26 986
Total: 28 51 46.0 46 1033

たしかにApache::Registryの方が速いけど、CGIに比べればApache::PerlRunも
かなり速い。BEGINブロックへの追い出しをきっちりやっていけばApache::Registry
とApache::PerlRunとの差は開くだろうけどね。
0047名無しさん@お腹いっぱい。01/12/16 23:01ID:???
ちなみに、
main() { printf("Content-Type: text/html\n\n"); printf("Hello, world\n") }
をコンパイルしたCGIだと
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 4 13.2 0 90
Processing: 10 105 345.4 11 2729
Waiting: 0 100 345.2 10 2725
Total: 10 110 346.3 11 2729

PHP 4.0.6で <?php echo("Hello, world\n"); ?> だと
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 15 6.2 15 36
Processing: 12 20 10.6 19 290
Waiting: 5 17 10.5 16 286
Total: 30 35 8.5 34 293

もちろん、これは初期化にかかる時間を計測しているようなものなので、
実際のスクリプトでは違った結果が出ると思う。
(それにしてもCGIでperlを動かすのは遅すぎ)
0048名無しさん@お腹いっぱい。01/12/16 23:19ID:???
Apache::PerlRunの結果が違ってた。本当は↓。欝氏。
Connnection Times (ms)
min mean[+/-sd] median max
Connect: 0 21 29.2 10 229
Processing: 8 101 295.4 42 3759
Waiting: 0 92 293.3 33 3703
Total: 8 122 295.5 80 3790
0049名無しさん@お腹いっぱい。01/12/17 00:18ID:fVST7IKB
>>46
うぁ、ほんと速いね。
でもなあ。suexec 出来ないのがなぁ。
一般ユーザで気軽にディレクトリ掘ったりできないのがちょっと。
FastCGI とかどうなんだろ。
入れてみっか。
0050 01/12/18 22:35ID:???
厨質で悪いんですが、mod_perlってan httpdでも使えるんですか?
0051名無しさん@お腹いっぱい。01/12/19 00:04ID:???
>>50
mod_perlはApacheのモジュールなので、対応しません。
0052名無しさん@お腹いっぱい。01/12/19 01:40ID:JMF99QDd
どうしても suexec したいんで、SpeedyCGI にしました。
mod_perl と普通の CGI の速度比が 100:1 だとすると、
SpeedyCG : 普通のCGI は 50:1 ってかんじかなぁ。

一行目の書換えで動くかとおもったけど、やっぱ多少のスクリプトの修正が必要だった。
行儀よくしろってか...
0053名無しさん@お腹いっぱい。01/12/19 04:30ID:???
前にこの板のどこか(たぶん)で読んだんだけど
別ユーザ+別ポートでもう一つApache動かして
本体側にAliasするってのが有った。
現実的かどうかは分からんけど、結構面白そうだよね。
0054名無しさん@お腹いっぱい。01/12/19 04:32ID:???
と思ったら45に書いてるじゃん (鬱
逝ってくる。。。
0055名無しさん@お腹いっぱい。01/12/19 19:43ID:tRuF1VkQ
>>53
うーん。やりすぎって感じがしないでもない。
ちゅうか、それだったら、Apache 立ち上げないで
必要最低限の HTTP を解釈する独自デーモンでも書いたほうがいいような。
0056名無しさん@お腹いっぱい。01/12/19 21:58ID:xcH3mu33
>>55
そうかなあ。
mod_perl環境の場合、前段にHTTPアクセラレータを
置くのは割と一般的だと思うんだけど。

こいつで振り分ければ良い訳だから
案外現実的な解かも...と思った。
0057名無しさん@お腹いっぱい。01/12/20 05:12ID:RDMFULhn
>>56
HTTPアクセラレータがなんだかわかってないDEATH。

一般的な mod_perl 環境ってどんなのなんでしょう。
普通はあれですよね。サイト全体の為のスクリプトをmod_perlで動かしたりするんですよね。
0058名無しさん@お腹いっぱい。01/12/20 12:24ID:tX1BaRx6
mod_perlって、httpdが太るじゃないですか。

画像とか静的なHTMLを出力するために、こんな大きなhttpdを
使うのは無駄なので、squidみたいなproxyを前段におくことが
あります。これがHTTPアクセラレータ。

同じマシンの中で両方するなら、
squid : port 80
mod_perl: port 8080
みたいな感じ。
0059名無しさん@お腹いっぱい。01/12/20 12:27ID:sKSPgKeT
>>57
squid等、キャッシュサーバーをwebサーバーの入り口において、
サーバーの負荷を軽くする技術です。
mod_perl組み込むと、httpdの実行イメージが肥大するので、
画像や、html等はmod_perlのhttpdでサービスするのは無駄です。
そのため、
動的ページ→mod_perl
静的ページ→軽量apache、mathopdやboa,thttpd等
と振り分けると理論上はパフォーマンスが向上するはずです。
perl.apache.orgにも、この手法が公開されてます。
私も実際に試しましたが、squidのオーバーヘッドが結構でかいのと、
squidのキャッシュコントロールの設定が難しかったので、
やめました。
ただ、セキュリティの点で導入するのならメリットあると思います。
色々やった末、軽量apache+speedycgiが、もっとも
確実で、パフォーマンスがいいと思いました。
0060名無しさん@お腹いっぱい。01/12/20 12:53ID:???
>>58-59
ケコ-ン!
0061名無しさん@お腹いっぱい。01/12/21 07:03ID:jk5ftRfj
>>58,59
色々勉強になりました。
とりあえず、perl.apache.org を読んでみます。
ありがとうです。
0062名無しさん@お腹いっぱい。01/12/21 11:04ID:vI34GlQ7
squid httpdアクセラレーターを語ろう
http://pc.2ch.net/test/read.cgi/php/998166103/
0063名無しさん@お腹いっぱい。01/12/21 16:25ID:kuKW9GTl
mod_perl環境でもプロセスIDはPerl/CGI呼び出す度に変わりますか?
0064名無しさん@お腹いっぱい。01/12/21 22:19ID:IUk0HPIs
cgiを止めてPHPオンリーってのはダメ?
0065名無しさん@お腹いっぱい。01/12/21 22:41ID:vI34GlQ7
>>63
プロセスIDはApacheのプロセス毎についてますが...?
#外してるよな...

>>64
好みの問題でしょう。ちなみにmod_perl環境ではperlでCGIを使う意味が
あまりありません。もしかして誤爆ですか?
00666301/12/21 23:00ID:???
>>65
今テンポラリファイル名に$PID使ってるので,mod_perlでもちゃんと動くかなぁと思って聞きました。
よく考えるとperlがhttpdになるだけなので だいじょうぶそうですね。
ありがとうございました。
0067名無しさん@お腹いっぱい。01/12/22 02:08ID:???
>>66
$PID使うよりも$UNIQUE_ID使った方が安全と思われ。
将来mod_perlが同一プロセス、複数スレッドで動くようにもなった場合はまるかもよ。
0068名無しさん@お腹いっぱい。02/01/02 14:28ID:z//VSzFn
Apache::Registry環境でPATH_INFOを使っていないときに
$ENV{'PATH_INFO'}を参照したら前回のPATH_INFOが
残ったままになってるんですが回避の方法って無いんですかね?
0069名無しさん@お腹いっぱい。02/01/02 20:06ID:???
>>68
手元の環境で試してみたところ、$ENV{'PATH_INFO'} はちゃんとクリアされて
たよ。PID が変わってないことも確認した。

とは言え、実際そっちではそうなってるんだろうから、当面の回避策としては
REQUEST_URI と SCRIPT_NAME を使って本当に自分が PATH_INFO 付きで呼ばれ
たのかを確認するしかないかな。
0070名無しさん@お腹いっぱい。02/01/05 21:34ID:LDyBbo+H
スイマセン、質問いいすかー?
とりあえず、mod_perl-1.26は動いてるんですけど、気になることが。

perl Makefile.PL USE_APXS=1 WITH_APX=/path/to/bin/apxs EVERYTHING=1

でMakefileつくってmakeの後、make testしたとき、
Can't make test with APXS (yet)
って出るけど、これはこれで問題ナシなんでしょーか。

Makefileのソースみてもこれしか
出ないようになってるからいいんだろうが・・・。

INSTALL.apaciに明記してある手順、
=head2 Build mod_perl as DSO outside Apache source tree via APXS
ではmake testも入ってるけど
実質的には意味のないステップなの?

気になります。だれか教えて。長くてスマソ。
0071名無しさん@お腹いっぱい。02/01/10 14:07ID:???
age
0072名無しさん@お腹いっぱい。02/01/12 03:23ID:9iEYLiJr
あげてみよう。
0073名無しさん@お腹いっぱい。02/01/25 00:51ID:???
おお、ためになった。
0074ほげ02/01/25 00:56ID:jfCY728M
おお、だめになった。
0075名無しさん@お腹いっぱい。02/02/01 01:56ID:???
運用が難しい(一般的にあまり利用されていない)
→KENTさんの技術力でカバー
http://kent.parks.jp/over3.html

YYボードも動きますか?
0076名無しさん@お腹いっぱい。02/02/01 13:01ID:???
>>75
>>32-35 辺り参照。
0077名無しさん@お腹いっぱい。02/02/01 16:37ID:uE2BC2dR
他スレでも出てたけど
mod_perl vs PHP + Zend Optimizer
ではどっちが早いの?
すげー気になる。
0078名無しさん@お腹いっぱい。02/02/01 22:22ID:???
http://kent.parks.jp/over3.html
>「mod_perl」とは、WEBサーバーでCGIを高速に動かすためのツールです。
さすがKENT (爆)
0079名無しさん@お腹いっぱい。02/02/03 21:19ID:nVjpXt8Y
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer mod_perl vs PHP + Zend Optimizer
0080名無しさん@お腹いっぱい。02/02/03 22:20ID:???
>79
マルチは感心しないな。
0081Redhater02/02/04 02:40ID:r5AiMbOu
mod_perlを使いつつ、suexecすることってできるんですか?
いろいろやってみたのですができません・・・。

http://www.goodbreeze.com/
0082名無しさん@お腹いっぱい。02/02/04 02:48ID:???
>>81
できない。
0083名無しさん@お腹いっぱい。02/02/09 23:28ID:???
mod_perlの事を知りたく思っています。
借りてるサーバーでmod_perlが使えるそうなので、軽くなるならと思い
色々調べはじめました。
ところがgoogleでmod_perlの事を検索したのですが、検索キーワードが
良くないのかmod_perlのインストールの方法とかばかりが引っかかり、
実際にコーディングをどうすればいいとか具体的な利用法とかの
載っているページが見つかりませんでした。
もしどなたか詳しく説明をされているサイトをご存知でしたら、
教えていただけないでしょうか?
よろしくお願いします。
0084名無しさん@お腹いっぱい。02/02/09 23:44ID:7ll9Q9qB
>83
-w付けて,use strictして,
グローバル変数はなるべく使わないようにして,
もし使う時も初期化をきちんとやる,
とかかなぁ。
漏れも知りたいのであげ
0085名無しさん@お腹いっぱい。02/02/09 23:49ID:WSZ5EavI
>>83
>>11-19
0086名無しさん@お腹いっぱい。02/02/10 07:55ID:???
何か適当にメールサーバ動かしてるけど、コードはそれほど変わらないよ
強いて言うなら、Packageの修飾をちゃんとする事とパイプ何かの
後片付けを忘れない事位かなぁ・・・・
漏れの書いたの見ると意識的に初期化する様なコードになってた
$scalar = ''; @ary = (); とか

あ、正規表現のoスイッチも駄目だったかも
0087名無しさん@お腹いっぱい。02/02/10 11:55ID:TL971BdT
うーむ、わかんねぇ。

たとえば、helloworldを表示するスクリプトを
mod_perlで動かすにはどうすんの?
00888302/02/10 12:56ID:TkkSs6mB
>87
自分もそれを聞きたいです。
それの説明されているサイトの紹介でも良いのでどなたかお願いします。

その後に>11-19を参考にさせてもらおうと思います。
0089名無しさん@お腹いっぱい。02/02/10 14:32ID:GSOYlDJs
基本的には、>>84で問題ないが、
mod_perlでは、
my() scoped variable in nested subroutines
という特殊な問題があるので注意。

http://perl.apache.org/
http://perl.apache.org/guide/
http://perl.apache.org/dist/cgi_to_mod_perl.html
http://perl.apache.org/dist/mod_perl_traps.html
は必読。
日本語ドキュメントは期待しても駄目よ。
0090名無しさん@お腹いっぱい。02/02/11 00:46ID:???
>>89
そこの中なら、
CGI to mod_perl Porting. mod_perl Coding guidelines.
http://perl.apache.org/guide/porting.html
見れば良いんでないの。
0091名無しさん@お腹いっぱい。02/02/11 21:03ID:???
あと、これが有るな。早く日本語版ホスィ
mod_perl Pocket Reference
http://www.oreilly.com/catalog/modperlpr/
0092名無しさん@お腹いっぱい。02/02/23 22:36ID:???
質問です。
以下はSocketを使って2ちゃんのトップページを表示する
簡単なCGIスクリプトですが、mod_perl経由だと動いてくれません。
mod_perlが動くことは確認したのですが、Socketを使うとなると
どうしても正常に動いてくれません。何か良いお知恵を・・・。
-----
use Socket;
socket('SOCK',PF_INET,SOCK_STREAM,getprotobyname('tcp'));
connect('SOCK',sockaddr_in(80,inet_aton('2ch.net')));
select((select(SOCK),$|=1)[0]);
print SOCK "GET http://2ch.net/ HTTP/1.0\r\n\r\n";
print "Content-type: text/html\n\n";
print <SOCK>;

# Apache/1.3.23 (Win32) mod_perl/1.26_01-dev
0093名無しさん@お腹いっぱい。02/02/23 22:48ID:???
私的にはIO::Socketのほうが好き。
0094名無しさん@お腹いっぱい。02/02/23 23:31ID:???
>>92
なんかおかしくないか?
GET / HTTP/1.0
じゃないの?
00959202/02/23 23:45ID:???
>>93
タイムアウトとかあってよさげです。
今度、使ってみようかと思います。
>>94
そうですね。正しくは
print SOCK "GET / HTTP/1.0\r\n";
print SOCK "Host: 2ch.net\r\n\r\n";
ですね。お手数かけてすいません。

いずれにせよ動いてくれませんが・・・。
0096名無しさん@お腹いっぱい。02/02/24 02:12ID:1IBSQesy
>>92
use strict;
perl -wで動かして、apacheのログ見てみてんさい
0097名無しさん@お腹いっぱい。02/02/24 02:19ID:???
素直にLWP。
0098”管理”者02/02/24 04:08ID:???
テスト書込み1
00999202/02/24 08:13ID:???
>>97
LWPを使ってみたら動きました。
SocketやIO::Socketだと動かず、LWPだと動くのは何故だかわかりませんが...

いろいろとありがとうございました。
-----
use LWP::Simple;
print "Content-type: text/html\n\n";
getprint 'http://2ch.net/';
0100ひろゆ子@暫定管&lre;直人02/02/24 18:18ID:???
>98
せめてこのくらいやって下さいですです。。。
0101ひろゆ子@暫定管&lre;理人02/02/24 18:19ID:???
なんのテストしたかったんだろう?100げとしちゃった、てへ。
0102名無しさん@お腹いっぱい。02/02/24 19:21ID:???
厨房丸だし
0103名無しさん@お腹いっぱい。02/02/28 20:41ID:9QfD2oaF
>>87のやり方って結局どうなのよ?
0104nobodyさん02/03/03 02:09ID:Z7la6eJB
こんなのあったよー。

Apache+mod_perlのCSS予防法
http://slashdot.jp/article.pl?sid=02/03/02/1150203
#クロスサイトスクリプティングの方。

個人的にはApache::*なモジュールよりも、
Apache::Regstryなコードを書くほうが多いから「ふーん」て感じ。
0105fight02/03/03 10:10ID:sYgoE6A5
ちょっと皆さんこのページさぁどう思う
http://www.geocities.co.jp/Bookend-Ango/2352/
0106nobodyさん02/03/03 10:13ID:???
>>105
いきなりwindowが開いてウザイ。板違い。宣伝氏ね。
0107なぁ。02/03/06 17:06ID:R30flEyT
apache_1.3.23 and mod_perl-1.26
でmake testがとおらないーー!

Can't locate object method "new" via package "URI::URL" at ../blib/lib/Apache/te
st.pm line 252.
だと。
なんか、調べるとLWP::UserAgent.pmにパッチを当てろとか書いてあるけど、
../blib/lib/Apache/test.pm
に当ててるわけでないから、意味ないきがするんだよね。
どうしたらよい?
テストが通らないくらい、無視してよいですか?

0108nobodyさん02/03/06 18:29ID:xRtVgBJD
>>107
モジュール類古くない?
とりあえずアップデートしてみたらどう?
perl -MCPAN -e '@mod = CPAN::Shell->r; CPAN::Shell->install(@mod)'
0109nobodyさん02/03/06 23:53ID:???
苦労してmod_perlなんて使うぐらいなら
CでCGI組めばいいじゃん。
0110nobodyさん02/03/07 00:09ID:???
C/CGIより速いからじゃない?
0111nobodyさん02/03/07 15:20ID:???
>> 110
そだね。CGI屋には馴染めない部分があるかもしれないけど、
Perl屋には普通のことばっかだし。
0112nobodyさん02/03/07 17:20ID:???
mod_perlとmod_phpだとどっちが速いの?
0113nobodyさん02/03/07 21:25ID:???
http://www.hippo2000.net/cgi-bin/KbWiki/KbWiki.pl?cmd=disp&page=PHP%a4%ce%ca%fd%a4%ac%b7%da%a4%af%a4%c6%c2%ae%a4%a4%a4%cf%cb%dc%c5%f6%a1%a9
>>112
上のリソースによると、大差ないか、少しmod_perlの方が速いということらしい。
0114nobodyさん02/03/07 21:41ID:572QyWU+
PHPって大した事ないんだね。
0115nobodyさん02/03/07 23:01ID:???
Apache::ASP使ってみた。 いい感じだけど、エディテングで発狂。
ASPとかJSPな人、どんなエディタ使ってんの?
0116nobodyさん02/03/07 23:37ID:???
>>115
Emacs + mmm-modeはどうよ。
ttp://mmm-mode.sourceforge.net/
0117nobodyさん02/03/08 00:30ID:???
俺的には、HTMLに埋め込むのはHTML::Template程度が限界。
011811502/03/08 01:18ID:???
さんきゅ、見てみる。
ASPというより、perl scriptのヒアドキュメントの中に埋め込みたいのだけど…
0119nobodyさん02/03/28 11:19ID:???
Apache::Registryを使用するためのconfigファイルの典型的なエントリ

Alias /perl/ /usr/local/apache/perl
<Location /perl>
  SetHandler perl-script
  PerlHandler Apache::Registry
  PerlSendHeader On
  Options +ExecCGI
</Location>
0120nobodyさん02/03/28 11:26ID:???
スクリプトを標準のCGIで実行するつもりがないなら、いくつかの
関数を、それらに対応するApache::関数で置き換えることで、若干
パフォーマンスを高め、メモリを大幅に節約することが出来る。

IO::File        --> Apache::File
CGI::escape     --> Apache::Util::escape_uri
CGI::unescape   --> Apache::Util::unescape_uri
CGI::escapeHTML --> Apache::Util::escape_html
POSIX::strftime --> Apache::Util::ht_time
0121nobodyさん02/03/29 03:17ID:???
Alias /perl "C:/www/http/home/mod_perl/"

<Directory "C:/www/http/home/mod_perl/">
SetHandler perl-script
# PerlHandler Apache::Registry
PerlInitHandler Apache::StatINC
AllowOverride All
Options +ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>

こういう風にやって、上のコメントアウトを外すとディレクトリーが404になってしまいます。
どうすれば直りますか?
0122nobodyさん02/03/29 03:17ID:???
 
0123nobodyさん02/04/05 18:16ID:???
mod_perl FAQ

【CGI動かねぇぞゴルァ!!】
で、どんな症状なわけ?いくつか可能性あるYO!

・File not found
Apacheの設定ファイルに正しいエントリを作成したのか?mod_perl.podに書か
れているように、Alias /perl/ ... と <Location /perl>... ディレクティプ
をaccess.confへ追加する必要があるんだよ。そしてもちろんスクリプトはAlias
ディレクティプで指定されたディレクトリの中にあって、ウェブサーバを実行
するユーザーが、読み込みと実行が可能でないとイヤン。

・Forbidden
てめーはこのサーバの/perl/fooにアクセスする許可を持ってねーよ。(プ
chmod 755 /path/to/my/mod_perl/scripts
chmod 755 /path/to/my/mod_perl/scripts/foo

・Internal Server Error
このスクリプトは実行時エラーで逝ってしまった。サーバーのerror.logの中に
エラーメッセージがあるからさ、それ読めばなんでそうなったか分かるっての。
そうそう、CGI.pmを使っているなら、スクリプトをシェルプロンプトで走らせち
まえば、何が起こるのか分かるかもしれん。

error.logにスクリプトの構文エラーだぞゴルァ!!って書いてあんのに、
perl -c /path/to/my/mod_perl/scripts/foo
だと全然オッケーな時は、__END__ や __DATA__が使ってるのが悪いんちゃうんか
と。ゴメソ、mod_perlのApache::Registryはそいつら使えへんねん。
0124あわてもの02/04/14 10:08ID:4YBd0gTm
 Apache2.0.35+ActivePerl5.6.1.631(mod_perl1.99_02-dev)
をインストールしてみましたがhttpd.confの設定が変わっているようで
 LoadModule perl_module modules/mod_perl.so
は記述するのですが、Apache1.3.24の場合のような
 AddModule mod_perl.c や #!D:/ActivePerl/561/bin/perl.exe
の記述は必要ないようです。

httpd.confに
ScriptAlias /mod-perl/ "D:/Apache2/mod-perl/"
<Directory "D:/Apache2/mod-perl">
SetHandler perl-script
PerlHandler Apache::Registry
AllowOverride None
Options +ExecCGI
Order allow,deny
Allow from all
</Directory>
と書いてapache2をスタート。一応ApacheServiceMonitorでは正常に
動いてるようです。

 ところがブラウザからCGIを動かしてみるとmod_perlのディレクトリ構成も変わっているようで PerlHandler Apache::Registry のままでは@INCにそんなものはないと怒られます。
 調べてみるとRegistry.pmは D:/ActivePerl/561/site/lib/apache2/ModPerl にあるので  PerlHandler ModPerl::Registry と変えてみましたが
 Can't locate ModPerl/Registry.pm in @INC (@INC contains: D:/ActivePerl/561/lib D:/ActivePerl/561/site/lib .) at (eval 1) line 3. と言われてダメ。

さらに調べてみると D:/ActivePerl/561/site/lib/にApache2.pmというファイルがあって@INCに D:/ActivePerl/561/site/lib/apache2を追加する機能があるらしいと解ったので物は試しと
PerlHandler Apache2 ModPerl::Registry
と書き直してブラウザからCGIを動かしてみると
 BEGIN failed--compilation aborted at D:/ActivePerl/561/site/lib/Apache2/ModPerl/RegistryCooker.pm line 48.
 Compilation failed in require at D:/ActivePerl/561/site/lib/Apache2/ModPerl/Registry.pm line 11.
 BEGIN failed--compilation aborted at D:/ActivePerl/561/site/lib/Apache2/ModPerl/Registry.pm line 11.
 Compilation failed in require at (eval 2) line 3.
といわれてダメでした。

 Apache2.0.35+ActivePerl5.6.1.631(mod_perl1.99_02-dev)でのhttpd.confの正しい設定を誰か知りませんか?
0125あわてもの02/04/21 23:11ID:1/aZbmex
 >>124はあほな質問だったのかな?
 それともこのスレ、誰も見てないのだろうか?

 誰か反応してくれませんか。
0126nobodyさん02/04/21 23:34ID:???
Apache2.xが流行るまで辛抱辛抱。
0127nobody02/04/22 02:35ID:80pbFtvd
< % Web Applications with Apache & mod_perl % >

Apache::ASP マニュアル和訳開始

http://sourceforge.jp/projects/apache-asp-jp/
0128nobodyさん02/04/22 03:24ID:???
>>125 lib の中にApache2/ModPerl/Registry.pmがあるなら
Apache2::ModPerl::Registry
じゃねーの?
0129あわてもの02/04/22 07:43ID:wb65qKDP
>>126
 励まし、ありがとうございます。

>>127
 情報、ありがとうございます。
 早速見に行ってきます。

>>128
 ご助言、ありがとうございます。
 でもすでにやってみましたがダメだったのです。
0130nobodyさん02/04/24 19:09ID:oPJvWoo3
$0と%ENVと%SIGはグローバル変数ですか。
0131lom02/04/24 19:27ID:a5s+3PHM
面白いのみつけたぞー。[email protected]
0132nobodyさん02/04/29 00:10ID:44EJtQiu
 Apache2対応mod_perl2の情報求む。

 当方httpd.confの書き方わからず難渋している。
0133nobodyさん02/04/29 00:21ID:???
>>132
http://www.freeml.com/message/[email protected]/0000238
0134nobodyさん02/04/29 01:20ID:???
httpd.conf:
-----------
LoadModule perl_module modules/mod_perl.so
Alias /perl e:/Apache2/cgi-perl
PerlRequire e:\apache2\conf\startup.cgi

<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options ExecCGI
PerlSendHeader On
</Location>

startup.pl:
-----------
#! /perl/5.6.1/bin/MSWin32-x86-multi-thread/perl.exe -w

use strict;
use Apache2 ();
use Apache::compat;

and a test script:
#! c:/perl/5.6.1/bin/MSWin32-x86-multi-thread/perl.exe -w
use ModPerl::Registry;
use CGI;

$q = new CGI;

print $q->header,
$q->start_html(),
'Hello',
$q->end_html();
0135nobodyさん02/05/26 20:20ID:???
メンテナンスでやんす
0136nobodyさん02/05/27 00:56ID:???
ここに書き込んでる奴等ってmod_perlがなんだかわかってんのかいな・・・
軽くなる軽くなるとは言うけど、結局一番短縮できる(というかスキップ
できる)のはコンパイルだけだぜ?

それよかApacheの色んなハンドラーを使えるとか、そういうことのメリット
のほうが大きいと思うけど。
0137nobodyさん02/05/27 01:46ID:???
>>136
じゃ、そういう具体的な事でも書いてってよ
0138nobodyさん02/05/27 13:32ID:???
>>136

Perlインタプリタをプロセスとして起動する必要が無くなる点を忘れてはいけない。
Apache::RegistryとApache::PerlRunを比べると極端に差が無いでしょ?
0139nobodyさん02/05/27 18:43ID:???
おお、そうかそうか。忘れてた。perl_init()(←関数名が怪しいが・・・)
が各プロセスに対して一回しか呼ばれないのだよね。
■ このスレッドは過去ログ倉庫に格納されています