mod_perlを使おう!
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん
01/11/07 17:42ID:+Gux2iOQ関連リンク等は>2
0449nobodyさん
2005/05/26(木) 14:15:01ID:/bJEfdxI痛いトコ付きますね!
2つの質問については正直不案内でした。
ourで変数を宣言してもMod_perlにては初期化されませんでした。
mod_perlは勉強する点が色々ありますね!
Perlがスラスラ書けると思い上がってました。
本の紹介どうもありがとうございます。
ついでに
use vars qw ($D $S $Z $SP @popron @vet @btys %in %rt);
($D,$S,$Z,$SP,@popron,@vet,@btys,%in,%rt)="";
の様に同じ配列が2つあるけど、それではスクリプトが複雑になるので以下みたく
@LIST=qw \($D $S $Z $SP @popron @vet @btys %in %rt);
use vars qw(@LIST)
@LIST=();
の様に配列名にパックして綺麗に書いて実行したいけどどの様にすれば宜しいでしょうか?
上の@LISTを使って実行しましたがエラーでした。
0451nobodyさん
2005/05/26(木) 17:16:42ID:???ttp://perl.apache.org/docs/1.0/guide/porting.html
0452nobodyさん
2005/05/26(木) 19:21:56ID:???0453nobodyさん
2005/05/26(木) 21:12:00ID:/bJEfdxIでも¥4,800もするのでは!!(汗)
どうしようか迷ってます。
でもMod_perlを使うには、それなりの勉強が必要だし、買おうか買うまいか?
でも折角だからMod_perl極めたいです。
0454nobodyさん
2005/05/26(木) 22:46:48ID:???RegistryPreforkはちゃんと使えんのかね?
0455nobodyさん
2005/05/27(金) 00:04:08ID:???"ModPerl::RegistryBB" is similar to "ModPerl::Registry", but does the
bare minimum (mnemonic: BB = Bare Bones) to compile a script file once
and run it many times, in order to get the maximum performance.
Whereas "ModPerl::Registry" does various checks, which add a slight
overhead to response times.
0456nobodyさん
2005/05/27(金) 09:07:23ID:???申し訳ないけど、多分、mod_perlうんぬんより、
perlの方をどうかした方がいいんじゃないのかな、、
use strict;で動く?
-wTでエラーでない?
0457nobodyさん
2005/05/27(金) 11:28:17ID:UfO/Wu7H>申し訳ないけど、多分、mod_perlうんぬんより、
>perlの方をどうかした方がいいんじゃないのかな、、
>use strict;で動く?
>-wTでエラーでない?
-wと変わりません。
use strict;
use vars qw ($D $S $Z $SP @popron @vet @btys %in %rt);
($D,$S,$Z,$SP,@popron,@vet,@btys,%in,%rt)="";
でMod_perl2.0は動作します。
後、exit;も使えます。
やっぱり、1週間掛かりで自分の手でMod_perlは動かせるようになったんだし、それなりに
興味が沸きました。
Mod_perlを是非学び極めたいです。
そうする事により、スクリプトを綺麗に書く自覚が芽生えて来ると思います。
投げたら何も進歩がありません!
0458nobodyさん
2005/05/27(金) 12:06:34ID:???・use vars は @ISA など一部の例外を除いて一切使わない
・全ての変数を my で宣言する
・スコープ外の変数をいじるときはハードリファレンスで参照渡しする
・変数がいつ消滅するかを明確に意識する
0460nobodyさん
2005/05/27(金) 13:00:56ID:UfO/Wu7HMod_perlのスレッドでMod_perlに関する話題を書き込んで何がいけないんですか?
納得に行きません!
0461nobodyさん
2005/05/27(金) 13:50:13ID:???mod_perlというより、perlの話題(質問)でしょ。
それも、かなり基本的な、、
多分、perl4の人なんだろうけど。
0464nobodyさん
2005/05/27(金) 15:48:29ID:???use warnings;
use sigtrap;
# use diagnostics;
0465nobodyさん
2005/05/27(金) 17:54:10ID:UfO/Wu7Huse strict;
my($D,@popron,%in);
の様に外部でMY宣言してもMYの有効範囲はあくまでもその宣言のあるスクリプト内。
よって、requireでロードされてるライブラリではグローバル変数のままの為
変数の初期化がされず値が増えてしまってる事が判りました。
やっぱ、以下のだと変数の完全初期化が果たせました。
use strict;
use vars qw($D @popron %in);
($D,@popron,%in)="";
何故、Mod_perlの初期化にmyで書くんだろう?
PS:この話題はMod_perlの事言ってるので、反感を買う筋合いは有りませんよね!
0467nobodyさん
2005/05/27(金) 18:00:06ID:???Apacheのサイトのドキュメントぐらい読んだらいいよ
mod_perl1.0の方からね
my と ourの違いとか
0468nobodyさん
2005/05/27(金) 18:06:25ID:???リロードしてわかるmyとourの違い
#!/usr/bin/perl -w
use strict;
print "Content-type: text/plain\r\n\r\n";
my $counter = 0; # Explicit initialization technically redundant
#our $counter = 0;
for (1..5) {
increment_counter();
}
sub increment_counter{
$counter++;
print "Counter is equal to $counter !\r\n";
}
0469nobodyさん
2005/05/27(金) 20:51:38ID:UfO/Wu7Hmy $counter = 0;
#our $counter = 0; でやったら
increment_counter();
内の処理が最初の1回だけ処理若しくはスクリプトを修正して1回目だけ
なされて、それ以降はスルーでした。よってスルー後の$counterの値は0でした。
逆にourを有効にさせればあらゆる$counterが追加算され値が増えていきます。
つまりmy宣言とour宣言の同名の変数は別物であり、ourはグローバル変数そのもの
0470nobodyさん
2005/05/27(金) 22:19:03ID:???ModPerl 以外の話題でスレが流れるのはカンベン。
0471nobodyさん
2005/05/27(金) 23:09:19ID:UfO/Wu7H私は、468の質問に回答しただけです。
Perlの勉強といってもMod_perlと関連性が非常にある訳ですか、それならココを
使っても問題ないでしょう?
Mod_perlを語るにPerlのプログラミングで説明する事は欠かせません!
469もMod_perlにてこのプログラムはどう動くかを述べてるのでMod_perlと大いに
関連があり、よってココを使っても攻められる筋はないと存じます!
0472nobodyさん
2005/05/27(金) 23:47:40ID:???普通に__END__が使えるようになったのかと思ったらこれがエラーになるってどういうことよ。
>>471
こんなところで油売ってる暇あったらPHPでも覚えれば?
0473nobodyさん
2005/05/28(土) 01:51:25ID:???ここでアホな質問続けてるやつはmod_perl以前の問題やん。
0475nobodyさん
2005/05/28(土) 10:34:31ID:xzv7Jv78Perlはある程度判ってるつもりです。5年以上もやって来たので。
私は、確かに常識が薄い人間ですが、ココではMod_perlで利用するというモラル
を心がけて使わせた戴いた結果がこの結果(攻められる)になりとても自分が悔しく
感じてます。
どうして、心がけて使いながら邪魔者にならなければいけなのか?
mod_perlだってperlの1つなのです。
で、471でもいいましたがmod_perlを語るにPerlは欠かせないんです!
1週間も素人の私の為に付き合っていただき、正直断念の1歩手前迄来ていたのが
mod_perlを動かせる様になったんです。
それは大変感謝しております!
mod_perlの設定は、一筋縄では行かないので、何度も有識者に尋ねて進めなければ
ココまで辿り着けなかったと思います。
ユーザの少ないmod_perlの議論が出来る様な所は他には見当たり難く、その為にも
ココの掲示板でのコミュニケーションが必要です。
この様な結果になってしまいましたが、どうか、そのモラルを心がけてココを使わせて
戴いた事だけは理解して戴きたいです。
今後も更にMod_perlを極めたいのでココを利用させて戴きたいです。
どうか宜しくお願いします。
0476nobodyさん
2005/05/28(土) 12:06:30ID:DRXi0Wgp0477nobodyさん
2005/05/28(土) 14:41:41ID:???5年はさすがに嘘だろ。せいぜい1ヶ月ぐらいしかやってないレベル。
mod_perlを極めたいなら、まずPerl自体を知らないと無理。
0478nobodyさん
2005/05/28(土) 14:52:27ID:???>>465のようにmyすら知らないのはPerl自体まともに書けないから。
myはmod_perl専用のキーワードではないわけだし。
他の人も言ってるが、まずPerlをまともに書けるようにならないと無理。
mod_perl特有の注意点を教えたところで全く理解できてないじゃないか。
0479nobodyさん
2005/05/28(土) 16:50:00ID:???まじめな話だが、グローバル変数をパッケージ名修飾で参照したり
シンボリックリファレンス使いまくったりとかなヌルいコードでもとりあえず走ってしまう、
てのが Perl の利点なのかもしれないが欠点でもあって、
困ったことに「ヌルさを極める」方向に走ることを「Perl上級者になった」と思っている人も少なくない。
でまあ、一度痛い目にあってようやく気づくわけだ。
mod_perl がその痛い目の代表例だろうと。
Blosxom の作者である Rael も「mod_perlで動かない」という事実に直面して初めて反省したみたいだし。
0480nobodyさん
2005/05/28(土) 17:25:40ID:???0481nobodyさん
2005/05/28(土) 17:46:53ID:xzv7Jv78Perlは本当に5年以上やってます。独学で、教則本を買ったり、オライリーのPerl
を購入したり、とほほwww入門を見たりで、数多くのCGIを作成して、自作のCGIで
実際にレンタルCGIも運営した事あります。
でも私のプログラムを見てもらったり書き方についてのコメントから見て周りからみれば
下手糞だと思われても仕方ないと思います。
後、Mod_perlの対抗馬ともいえるSpeedy.cgiというものもありました。
これも、Perlを高速化するプログラムで、もちろんメモリ常駐型で変数初期化に
気をつけなければなりませんが、以下URLを基に調べてみましたMod_perlに比べる
とプログラムの書き方にシビアにならなくてよさそうです。
http://www.maido3.com/server/option/perlcgi.html
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod
http://sunos.saita.ma/2ch-cgi-lw..html
0482nobodyさん
2005/05/28(土) 18:29:09ID:???無能だからだよ。
どれだけ勉強したって、免許持ってなかったら車は運転できないだろ?
対人コミュニケーションも大切だけど、技術的なコミュニケーションも
取れないんじゃウザがられてもしょうがない。
0483nobodyさん
2005/05/28(土) 18:48:13ID:???>>479の「パッケージ名修飾」「シンボリックリファレンス」の言葉の意味分からないだろ?
それを質問するのはここじゃない。perl初心者スレに行け。
0484nobodyさん
2005/05/28(土) 19:01:07ID:???空気が読めない奴は、それだけで犯罪だよ。
0485nobodyさん
2005/05/28(土) 21:11:26ID:???理解できてないじゃないか!
と、おれはいいたい。
0486nobodyさん
2005/05/28(土) 21:14:27ID:xzv7Jv78>無能だからだよ。
>対人コミュニケーションも大切だけど、技術的なコミュニケーションも
>取れないんじゃウザがられてもしょうがない。
新しい事を知るには、最初は初心者、知識もほとんどありません!
Mod_perlを極めたくても最初は無知なのです。
ましてはあまり流行ってないMod_perlを知ってる人は数少ないし、Mod_perlのページを
見ても自力で覚えられるに限度があります。そして、Mod_perlの議論が出来る掲示板なんて
ここ以外どこにありますか?!
Mod_perlの知らない人間がその事を学びたく、問答して何が悪いんですか?
Perlも5年以上やってきましたので、確かに私は書き方が荒く、周りからみればPerlの
書き方が未熟と思われても致し方ないと思いますが、ここまで経験があるし、自己主観
ですがPerlの腕前を見てみても、Mod_perlを試してみてもいいレベルには達していると思います。
>「パッケージ名修飾」「シンボリックリファレンス」の言葉の意味分からないだろ?
これらは知ってます。
確かに掲示板の空気は読むのは苦手です。
改めて申しますが、モラルを意識して書き込んだ事だけは理解して下さい。
これで邪魔者扱いされる様ななら、ここの掲示板は不親切過ぎると思います。
空気の読み方や技術的なコミュニケーションは、ココでの事の様に簡単ではない場合も
あります、あからさまにウザがる以前に少し親切な扱いをされてもいいのではと思います。
これだけ反論、自己の事情と利用した際の態度を述べました。
どうかココの掲示板の議論に今後とも参加させて下さい!
0487nobodyさん
2005/05/28(土) 21:41:57ID:???大体なんでそんなにmod_perlにこだわるのさ。
起動するたびに大きなファイルを丸ごと読み込むようなことしてたらmod_perlなんか意味無いよ?
0488nobodyさん
2005/05/28(土) 21:43:24ID:???他人の話を聞かない奴が議論できるとは到底思えないが?
>Mod_perlを極めたくても最初は無知なのです。
mod_perl云々の前にPerl自体が初心者レベルなのだから、まずPerlの基礎をやれと言っとるんだ。
それができれば自然にmod_perl化できる。というかPerlとmod_perlを別言語だと思ってないか?
Perlがちゃんとできればmod_perl化に苦労はいらない。それができないってことはPerlができてないんだ。
0489nobodyさん
2005/05/28(土) 21:53:24ID:???0490nobodyさん
2005/05/28(土) 22:17:47ID:???0491nobodyさん
2005/05/28(土) 23:27:54ID:haTNBXhi0492nobodyさん
2005/05/29(日) 05:16:08ID:???みたいな奴だな。
0493nobodyさん
2005/05/29(日) 11:45:03ID:LobLqbIr0494nobodyさん
2005/05/29(日) 19:13:32ID:???たとえば単純に、
$vi test.cgi
-----
#!/usr/bin/perl
use strict;
use Apache::RequestRec ();
use Apache::Const qw(:common :http);
my($r) = shift; # $r = Apache2::Apache::RequestRec Object
my($headers_out) = $r->headers_out;
$r->status_line('206 Partial Content');
$r->status(HTTP_PARTIAL_CONTENT);
$headers_out->{'Accept-Ranges'} = 'bytes';
$headers_out->{'Content-Length'} = '10';
$headers_out->{'Content-Range'} = "bytes 0-9/10";
$r->content_type('text/plain');
$r->print("0123456789");
return(OK);
-----
$chmod 755 test.cgi
Telnetで
$telnet localhost 80
GET /cgi-bin/test.cgi HTTP/1.1
Host: localhost
Range: bytes=0-9
とすると、レスポンスが
0495nobodyさん
2005/05/29(日) 19:14:09ID:???-----
0123456789<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>206 Partial Content</title>
</head><body>
<h1>Partial Content</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
[email protected] and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
</body></html>
Connection closed by foreign host.
-----
のように、データの後にエラーのHTMLが吐き出されてしまいます。
error_log は LogLevelを debug にしても何も書き出されませんでした。
0496nobodyさん
2005/05/29(日) 19:14:51ID:???更に続きです。
ちなみに、$r->status() を
$r->status(HTTP_OK);
にすると正常?に動作はしますが、ステータスが 200 なので、
約束違反のようで心配です、
まさか、mod_perl はステータスを 206 にするとエラー扱いされる、
または使えないのでしょうか?
それとも、根本的にやり方がおかしいのでしょうか。
mod_perl を使わないで以下のソースで動作させると問題ありませんでした。
-----
#!/usr/bin/perl
use strict;
print "Status: 206 Partial Content\n";
print "Accept-Ranges: bytes\n";
print "Content-Length: 10\n";
print "Content-Range: bytes 0-9/10\n";
print "Contet-Type: text/plain\n\n";
print "0123456789";
-----
Apache/2.0.52 + mod_perl/1.99_16 + Perl/v5.8.0 の環境です。
長々と失礼致しました。
何かヒントを頂ければ幸いです。
よろしくお願いします。
0497nobodyさん
2005/06/04(土) 06:49:29ID:???0499nobodyさん
2005/06/10(金) 21:29:50ID:???mod_perl2 配下で動かしたスクリプトのカレントディレクトリが
apache2 のホームになるのを何とかしたいんだけど、方法解る人いる?
できれば、スクリプト起動時にそのスクリプトが置いてあるディレクトリに
移動させたいんだけど
あと、インストールの時、ここを見ながらインストールしたんだが
ttp://multix.jp/html/memo/030524.html (トップページ見るとチョットひくがw)
このページの start.pl の2ヶ所が俺の環境だと動かないからコメントアウトしたんだけど
use Apache2 ();
use ModPerl::Util ();
use Apache::RequestRec ();
use Apache::RequestIO ();
use Apache::RequestUtil ();
# use Apache::Server (); ← 動かない
use Apache::ServerUtil ();
use Apache::Connection ();
use Apache::Log ();
use Apache::Const -compile => ':common';
use APR::Const -compile => ':common';
use APR::Table ();
# use Apache::compat (); ← 動かない
use ModPerl::Registry ();
use CGI ();
これって、俺の mod_perl2 がオカシイって事だよね。何処から持ってくればいいんだろう…。
0500nobodyさん
2005/06/11(土) 07:30:12ID:???本家のドキュメント見た方がいいと思う
tp://perl.apache.org/docs/2.0/os/win32/config.html
モジュールはCPANから
0501494
2005/06/11(土) 15:11:32ID:???Apache API ではなく、CGI.pm を使えば問題ないみたいです。
-----
#!/usr/bin/perl
use strict;
use CGI;
my($q) = new CGI;
print $q->header(-type => 'text/plain',
-status=>'206 Partial Content',
-accept_ranges => 'bytes',
-content_length => '10',
-content_range => 'bytes 0-9/10');
print "0123456789";
-----
CGI.pm なので重たくはなると思うけど、mod_perl を使わないよりは
比べ物にならないくらいマシなので、これでいきます。
それにしても・・・API の使い方が間違っているのかな?
0502nobodyさん
2005/06/27(月) 23:40:52ID:???Apache2.pmも無くなったよ。
0503nobodyさん
2005/11/24(木) 18:30:18ID:5fWGjQ1LModPerl::Registryな環境で動作させた場合、以前の
Apache::Registryとは、結構違う感じなのでしょうか?
動作しない場合もコードによって出てきそうな気が・・・。
ご存知の方、アドバイスお願いいたします。
0504nobodyさん
2005/11/25(金) 23:26:51ID:???Apache::reload辺りが変更になってハマった記憶があるけど。
0505503
2005/11/26(土) 01:05:31ID:???情報ありがとうございます。なるほどそうでしたか!
今、Apache2.0 + mod_perl1.99な環境を作っています。
特に、CatalystやCGI::Applicationの動作が問題ないか
気になっていました。
0506nobodyさん
2005/11/28(月) 21:12:47ID:c6nvYUNhmod_perlには
CGI::Session Apache::Session
どちらを使うのが効率良いのでしょうか?
0507nobodyさん
2005/11/30(水) 17:44:26ID:s8bRu2i20508nobodyさん
2005/11/30(水) 17:59:22ID:???それくらいだったら自分で取ってみたら?って事で。
他のモジュールとの相性もあるだろうし。
おれはCGI::Applicationをよく使うから、CGI::Sessionの
ラッパーのプラグインを使ってるけど。
0510nobodyさん
2006/01/02(月) 11:18:27ID:LIsIGKJ1use strict でエラーが無ければ mod_perl に修正無しで動くとは限らない
という認識で OK ですか?
逆に、
mod_perl 使っててエラーが無ければ、mod_perl 環境外で修正無しで動く
もんなんでしょうか?
0511nobodyさん
2006/01/03(火) 02:21:30ID:???どっちでも修正は必ずいるよん。
修正する必要がないように作ってあるものはmod_perlの恩恵を受けられないよん。
0512nobodyさん
2006/01/03(火) 14:53:51ID:???両対応で書いてるけど。
0513nobodyさん
2006/01/07(土) 02:56:13ID:???アパッチが性能向上に励んでいるのに足引っ張りまくり。
mixiがmod_perl使ってせいで重いのは当然だな。
試しに作る分にperlはありだけど、運用するならもっと軽い実装方法とか共同鯖なら実行プロセスのセキュリティのことを考えた方がいいよ。
0514nobodyさん
2006/01/07(土) 09:52:35ID:???このひとPerl vs Ruby vs Python vs PHPスレにも居たJava厨?
0515nobodyさん
2006/01/07(土) 12:43:10ID:???0517nobodyさん
2006/01/08(日) 01:16:19ID:???mod_perl と TOMCAT なら mod_perl の方が速いという結果が出てるけど
ま、CでApacheモジュールとして作り込むのが一番速いだろうけど、
開発コストやセキュリティ的に現実的じゃないしな。
0518nobodyさん
2006/01/17(火) 16:12:00ID:???apacheを肥大させたくないのならfastcgi
少人数でコストを抑えて速度を求めるならmod_perlはグッドチョイスだと思うよ
0519nobodyさん
2006/02/10(金) 12:07:43ID:???エロイ人教えてくれ。
0520nobodyさん
2006/02/10(金) 14:02:17ID:???0521nobodyさん
2006/02/10(金) 16:31:37ID:???0522nobodyさん
2006/02/16(木) 19:42:32ID:???今回、mod_perl2 に手を出してみようと思ったんですが、
mod_perl2 はおろか mod_perl1 も初めてです。
Apache2 を使う都合上、mod_perl2 で開発になるんですが、
色々とサイトを調べても mod_perl2 の情報は少ないのですね…。
みなさんはどこで mod_perl2 の勉強をされたのでしょうか?
というかその前に mod_perl から勉強した方がいいというオチ!?
mod_perl の 2 と 1 の違いもあまりわからない初心者ですが
何か有益なサイトがありましたら教えてください。
とりあえず http://perl.apache.org/docs/1.0/guide/porting.html で mod_perl1 を学んで、
http://modperlbook.org/html/part5.html で mod_perl2 を知ろうかと思ったんですが
英語なので早くも挫折しそうです ^^;;;^^;^;^;^^
0523nobodyさん
2006/02/16(木) 20:16:42ID:???0524nobodyさん
2006/02/17(金) 01:59:05ID:???0525nobodyさん
2006/02/17(金) 02:16:31ID:XCO/AQtb0526nobodyさん
2006/02/17(金) 15:52:42ID:???日本語情報が欲しいなら、オライリーのApache拡張ガイドを買った方がいい。
ただ内容がmod_perl1だから、2については本家ドキュメントを読むしかないね。
1と2は結構違うけど、単にRegistryで動かすんなら、
変更があったPerlハンドラに気をつければ、1と大して変わんないよ。
0527522
2006/02/21(火) 18:55:01ID:???レス有難うございました。
あれから色々と調べていますが、
mod_perl1 の文書と mod_perl2 の文書を
行ったりきたりで結構混乱してます。。
(ハンドラがよくわかってないです)
そもそも post/get 関わらずクエリを取る場合、
どのやりかたが一般的なのでしょうか?
1. CGI.pm
2. Apache2::Request;
3. Apache2::RequestRec (これはpostが取れない??)
また、ファイルのアップロードを受け付ける場合は 1, 2 だけ??
Apache関連モジュールを使わなくても
CGI.pm で普通にコーディングしたら動いたので、
そのままCGIを組むように作ってもmod_perlの温床に預かれるのでしょうか。
0528nobodyさん
2006/02/21(火) 20:10:21ID:???恩恵があるかどうかは、CGI.pmのソース見てみればわかるよ。
バージョンが古いとだめかも知れないけどね。
0529527
2006/02/21(火) 20:42:11ID:???最新の CGI.pm は mod_perl 環境かどうかで
切り替えて use してますよね。
CGI.pm を使って普通に strict なソースを組めば
(プログラムのパスなどの注意は別として)
問題なく mod_perl2 が使えるって考えで正しいでしょうか?
変に難しく考えすぎてたのかな…
Apache2の設定も
<Files *.pl>
SetHandler perl-script
PerlHandler ModPerl::Registry
Options +ExecCGI
PerlSendHeader On
Order allow,deny
Allow from all
</Files>
この程度です。
0530529
2006/02/21(火) 22:06:48ID:???PerlModule ModPerl::Registry
PerlModule Apache::DBI
#PerlModule CGI
PerlRequire /var/www/lib/startup.pl
<Files ~ "\.pl$">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlOptions +ParseHeaders
</Files>
いろんなサイトにはExecCGIも書いてあったのですが、
この場合不要ですよね…
0531nobodyさん
2006/02/22(水) 03:05:01ID:???http://perl.apache.org/docs/1.0/guide/config.html
> The Options directive accepts various parameters (options),
> one of which is ExecCGI. This tells the server that the file is
> a program and should be executed, instead of just being displayed like
> a static file (like HTML file). If you omit this option then
> the script will either be rendered as plain text or else it will
> trigger a Save-As dialog, depending on the client's configuration.
調べてみたけど、出力したものをHTMLとみなすために(?)一応、要るのだと思う。
0532530
2006/02/23(木) 16:34:46ID:???有難うございます。やっぱり必要だったのですね…。
コメントアウトしても動いていたので不要なものなのかと思っていました。
ちなみに mod_perl2 で使うモジュールについてなんですが、
ドキュメントで PerlModule と PerlRequire が同義であると知りました。
なので、PerlModule を使わずに全部 startup.pl 内で定義しようと思ったのですが、
use strict; use warning; の定義については効果ないのですね。
(どのスクリプトでも my 使わない変数が使えてしまいました)
CGI.pm とかは、スクリプト内で use CGI; しなくても使えたのですが。
それと、mod_perl2 で使われる標準モジュールがよくわからないのですが、
Apache2.pm は必ずしも必要なのでしょうか?ModPerl::Registry, CGI.pm だけで動作しているのですが、
サイトによっては use Apache2 が必要と書いてあったりします。
(使いたいのは、基本的な関数(exitなど)やサーバ環境変数程度ですが、現状問題なく動いてます)
(CGI.pm あれば事足りるって感じなのかな)
また、exit 関数が自動で ModPerl::Util::exit に割り当てられているようですが、
その場合は use ModPerl::Util; しなくてもいいのでしょうか?
うーん。。アホな質問ですんません。
【環境】
OS: CentOS4.2, Perl: 5.8.5, Apache: 2.0.52, mod_perl: 2.0.2
0533nobodyさん
2006/02/23(木) 17:09:07ID:???0534nobodyさん
2006/02/23(木) 21:49:49ID:???exit関数は、昔はCGI.pmに定義されてたこともあったけど、
今はどうなってるのかさっぱり。
ドキュメントも無いし…。
0535nobodyさん
2006/02/23(木) 22:21:53ID:???何らかのフレームワークに乗っかればいいだけやん。
0536nobodyさん
2006/02/24(金) 12:51:51ID:???0537nobodyさん
2006/03/01(水) 17:15:17ID:???最後にちゃんと $dbh->disconnect(); しないと危険?
0538537
2006/03/01(水) 17:26:08ID:???最初にDBにつないでデータ取ってきてそれをごにょごにょやって
ある条件のときにリダイレクトなりエラーなりをさせたときに、
その前にDBを disconnect するのを忘れちゃうんですよね
0540ヽ(´ー`)ノ ◆.ogCuANUcE
2006/03/01(水) 20:04:52ID:???危険つーか、新しくユーザからリクエストがある度にコネクションを開いて
そのままになったら、いつかは DB 側の限界が来てエラーになる…かも。
自前でコネクションプーリングしてれば別だけど、disconnect() しとけば?
> その前にDBを disconnect するのを忘れちゃうんですよね
……。
0541537
2006/03/01(水) 20:28:51ID:???ですよね…
ちなみに、mod_perl + DBI のときは PrintError と RaiseError はどうしてるんですか?
RaiseError => 1 に関わらず、DB接続後にdieされたときには
mod_perlでも自動でdisconnect されるんでしょうか?
…であれば、die しているところでは明示的にdisconnect不要ですよね
0542nobodyさん
2006/03/02(木) 00:14:54ID:???dieで閉じるのも変数のスコープから外れてこれが動くだけでしょ。
0543ヽ(´ー`)ノ ◆.ogCuANUcE
2006/03/02(木) 00:37:49ID:???DBI のマニュアル読んできた。デフォルトでは DESTROY が動けば閉じてくれる
ようだ。InactiveDestory => 1 だと DESTROY でも閉じないようだよ。
スコープから抜けたりして DESTROY が動けば閉じられるけど、mod_perl 下では
そうじゃないケースも簡単に作れてしまう。
やっぱり disconnect() するか Apache::DBI を使う方がいいと思う。
> ちなみに、mod_perl + DBI のときは PrintError と RaiseError はどうしてるんですか?
エラー受けたら再試行やロールバック。
ユーザにごめんなさいするページを表示して管理者にメール。
ログ見てデバッグ。
0544nobodyさん
2006/03/02(木) 11:29:14ID:???Apache::DBI を使えば、例えperlのソースに disconnect() があってもそれは何もしないってマニュアルで見ました。
ってことは apache のプロセスが終了したときに自動で disconnect() されるんかな?
一度、Apache::DBI で組んでたんですけど、コネクションがいくつか立ち上がってるときに、
コマンドラインでテーブルを drop しようとすると、何もエラーが出ずに返ってこなくなりました。
恐らく drop する時にはそのテーブルを参照しているコネクションが閉じられてないとダメなんでしょうね。
(apache を再起動してコネクションを開放したらdrop できました。)
ただ、レコードの追加・更新・削除はコネクションあっても問題なくできて、
apache 側でも更新されたレコードはすぐに参照できたんですよね。
その辺がしっくりこなくて、Apache::DBI を使うのをちょっとやめようかなという気になってしまってました。
でも逆に DBI を使うと、ちゃんと disconnect() しないとコネクションが張られ続けるって問題が…
(エラーチェックはどっちにしてもちゃんとやれってことですね。)
0545ヽ(´ー`)ノ ◆.ogCuANUcE
2006/03/02(木) 16:14:08ID:???> コマンドラインでテーブルを drop しようとすると、何もエラーが出ずに返ってこなくなりました。
……。
0546544
2006/03/02(木) 16:47:20ID:???なんか不慣れ丸出しですんません。
最初コネクションが原因だとわかるのに数時間はまりましたw
Webを放置すると、同じテーブルを再構築したりしたのに現象がおきなかったので。。
(そりゃ、コネクションの問題であれば一定時間経過しちゃえば現象なくなりますわ)
とりあえずApache::DBI使ってdisconnectをまかせてみます。
0547nobodyさん
2006/03/08(水) 07:55:23ID:???たまにソースを変更した箇所が反映されていなかったりエラーが出たりして
結局htttpd自体をリロードするハメになってしまいます
これを回避する方法はありますか?
0548nobodyさん
2006/03/08(水) 18:08:50ID:???{
my $hoge;
}
my $hoge;
のようなことをやると、以下のエラーが出たり出なかったりします。
Can't use global $0 in "my" at (eval 114) line 1, near "local $0 "
BEGIN not safe after errors--compilation aborted at xxx.pl line xx.
※line xx の行は「use strict;」 と書かれています。
mod_perl ではたとえブロックが違っていても、
同じ変数名は my で定義できないのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています