mod_perlを使おう!
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん
01/11/07 17:42ID:+Gux2iOQ関連リンク等は>2
0611nobodyさん
NGNG0612nobodyさん
NGNGメモリリークのテストで失敗してしまいました。
こういうのはどうしたらいいんでしょうか、、、
t/be_memleak..........ok 1/2 mem usage went from 2628K to 6256K in 1000 runs
t/be_memleak..........FAILED test 2
Failed 1/2 tests, 50.00% okay
0614nobodyさん
NGNGメモリリークが起きてるなら、
それを直したほうがいいかなぁ、、と。
0615nobodyさん
2006/04/09(日) 12:26:29ID:???検索したらこんなのありました。
ttp://rt.cpan.org/Public/Bug/Display.html?id=13521
去年の7月に最初に報告されてからずいぶん放置されてたようだけど、
4/2に着手になってるからいずれ直るかも?
0616nobodyさん
2006/04/09(日) 12:43:20ID:???0617nobodyさん
NGNG0618nobodyさん
2006/04/09(日) 18:42:07ID:???0619nobodyさん
NGNG0620nobodyさん
2006/04/10(月) 03:16:42ID:???使ってみて具合が悪かったら自分でごにょごにょして作成者やメンテしてる人にパッチ送ったり
0621nobodyさん
2006/04/20(木) 15:40:54ID:???httpd.confにApache::Registry等を書き込む方法を説明した
サイト等があれば是非教えていただきたいのですが。
このままだと多分mod_perlが入っていない状態と同じであると思われるので…
0622nobodyさん
2006/04/21(金) 11:54:36ID:???サイトは知らないけど、こんな感じでOK。
但し、Apache2+mod_perl2での例。
LoadFile "c:/Perl/bin/perl58.dll"
LoadModule perl_module modules/mod_perl.so
<Directory "c:/mod/perl/path">
SetHandler perl-script
PerlHandler ModPerl::Registry
Options +ExecCGI
</Directory>
0623nobodyさん
2006/04/21(金) 12:44:01ID:???有難うございます。
しかし、やってみた所、どうもInternal Server Errorが出てしまいます。
Windowsにはパーミッションの概念がないので、
confのどこかがおかしいのは明白なのですが。
状況が分かりにくいと思いますので、上記の修正前のhttpd.confを丸ごと上げました。
もし宜しければ、修正点などを指摘して頂けないでしょうか。
ttp://www.uploda.net/cgi/uploader4/index.php?dlpas_id=0000001608
pass:conf
0624622
2006/04/21(金) 18:19:24ID:???httpd.conf を見ましたが、特にエラーとなる要因は無いと思います。
ただ、
PerlHandler ModPerl::Registry
といった記述が無いので、このままではmod_perlは動作しないと思いますが、
修正後は入れているということですよね?
apachectl -t
で何かエラーが出ますか?
リクエスト時の error.log には何が記録されてますか?
テストしているソースコードは他のmod_perl環境で動作した実績はあるのでしょうか。
0625nobodyさん
2006/04/22(土) 12:41:09ID:???confファイルを見て頂き、大変恐縮です。
上記のスクリプトは修正前なので、実際は何れの<Directory>の中に
PerlHandler等の記述をした上で行います。
apachectlコマンドは、binフォルダ内にもApacheフォルダ内にもexeが存在しないため、
多分ですが、Win32環境では使えないのでは、と思っています。
実際に、既存の<Directory>内に(C:/wwwとC:/www/user/*)
SetHandler perl-script
PerlHandler ModPerl::Registry
を追加してみたものの、今度はWebページすべてが404エラーとなり、
cgiへのパスを入力した所、Internal Server Errorが出ました。
尚、その場合におきまして、error.logには、
cgi-lib.plが@INC内にないというエラーが出ましたので、
早速@INCに当たる部分(C:/Perl/lib/)に、公式より落として入れてみたものの、その後も
[error] [client 192.168.11.2] Attempt to serve directory: C:/www/
のようなエラーが出たまま、cgiファイルは勝手にソースを
ダウンロードさせるような形になってしまいました。
その際にも、相変わらずWebページは404エラーのままでした。
0626nobodyさん
2006/04/23(日) 13:51:13ID:???0627nobodyさん
2006/04/23(日) 13:54:33ID:???print q{Content-Type: text/plain}, map {qq{$_=$ENV{$_}\n}} keys %ENV
という内容のファイルで試してみ。
何か汚そうなコードを動かそうとしているみたいだから。
0628nobodyさん
2006/04/26(水) 19:48:07ID:???0629nobodyさん
2006/04/26(水) 21:28:55ID:???0630nobodyさん
2006/04/27(木) 15:22:10ID:???とりあえずここ嫁。
ttp://perl.apache.org/docs/2.0/os/win32/config.html
0631622
2006/04/27(木) 16:42:02ID:???遅くなりました。
Win32版に apachectl は無いですね。
失礼しました。
何が原因か分かりませんが、状況からすると mod_perlだけでなく、
他の問題も含まれている気がします。
まずは、mod_perlを後回しにして普通の CGIが動くようにディレクティブを設定して、
それから mod_perlに関する記述を入れてはいかがでしょうか。
そんなに複雑な設定をしなくても、すんなりと動いてくれるはずです。
但し、mod_perl に適したソースコードが前提となりますが。
>>630 のリンク先も、かなり参考になるはずです。
0632nobodyさん
2006/04/28(金) 01:25:45ID:???Attempt to serve directory がログに残るのは,SetHandler を記述すると
DirectoryIndex が効かなくなるためです。よって 404 が返るのだと思われます。
で,cgiを動かしたいディレクトリがどこなのハッキリしませんが,c:/www だとすると,
<Directory "c:/www">
Options -Indexes FollowSymLinks +ExecCGI
AllowOverride None
Order allow,deny
Allow from all
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
</Directory>
とりあえずオマケで付いてくる printenv.pl を置いてみて,確認しましょう。
但しこれですと htmlファイルとかも mod_perl の餌食になりますので,
SetHandler以下3行をFilesMatchなんかで括って,拡張子 cgi だけ
mod_perlで動くようにするすると幸せになれるのでは?
0633nobodyさん
2006/04/29(土) 02:42:25ID:???たくさんのレスを頂き大変感謝しています。
御陰様で、やや状況が前進しました。
>>630氏のサイトを参考に設定を行い、>>632氏の指摘通りに
.cgiの拡張子のみに適応するようにしました所、
>>627氏の記述(HTTPヘッダを付け足しましたが)により生成したcgiと、
>>630氏のサイトのprintenv.cgiを正しく表示する事が出来ました。
しかし、>>627氏の仰る通りに、汚いプログラムを動かしているのですが、
どうやらcgi自体がrequireしているファイルを、@incの場所しか読まず、
同階層に存在しているものを、読んでくれない為の様なのです。
何故なら、@incに存在しないファイル(cgi-lib等)が、
require要求を出すCGIと同一の階層に既に含まれているからです。
ちなみに、mod_perlを使わない状態では、
エラーは出る事がなく、きちんと見る事が出来ていました。
どうか、お知恵をお貸しください。
0634nobodyさん
2006/04/29(土) 05:02:27ID:???0635632
2006/04/29(土) 08:38:44ID:???PerlRequire に記述した StartupScript (例では extra.pl) の先頭に,
INC に追加したい Path を以下の様に記述してください。
(Pathはテキトーです,書き換えて下さい)
BEGIN {
use lib qw( c:/www/lib c:/www/cgi-bin/lib );
}
または,cgi の先頭に 上記の use 文のみ記述しても同じです。
これで INCの問題は解決しますが,そもそも mod_perl では cgi 実行時の
カレントディレクトリが cgi の存在するディレクトリになりません。
汚い cgi では File の入出力とかで問題が出るかも?ですので,ファイル名が
相対パスで記述されている部分を絶対パスにするなど,手を打っておきましょう。
Have a nice GW !!
0636632
2006/04/30(日) 01:19:27ID:???635 の use 文は無し無しです。
require を絶対パスで記述して下さい。たとえばこんな感じ。
require 'c:/www/jcode.pl';
しかし,想像するに Perl4 時代の cgi の様な感じがしますね。
結構苦労すると思います。この際,ModPerl::Registry は止めて
ModPerl::PerlRun で妥協するのも有りかもしれません。
0637nobodyさん
2006/05/05(金) 22:48:25ID:2XcXcVrY下記コードをmod_perlが実行できる環境で単純に実行するだけだと Cannot open included file とエラーがでます。
mod_perlで実行するには、どう変更したらよいのでしょうか。
__ HTML __
<html>
<head><title>Test Template</title>
<body>
My Home Directory is <TMPL_VAR NAME=HOME>
<p>
My Path is set to <TMPL_VAR NAME=PATH>
</body>
</html>
__ perl __
use strict;
use HTML::Template;
my $template = HTML::Template->new(filename => 'test.html');
$template->param(HOME => $ENV{HOME});
$template->param(PATH => $ENV{PATH});
print "Content-Type: text/html\n\n", $template->output;
0640nobodyさん
2006/05/06(土) 09:50:32ID:???0641nobodyさん
2006/05/06(土) 13:03:05ID:DaCfpo3Zありがとうございますー。
テンプレートの場所をフルパスで指定しましたらエラーは吐かれなくなりました
>mod_perlではスクリプトのあるディレクトリがカレントディレクトリになるわけではない。
肝に銘じておきます。
0642nobodyさん
2006/05/06(土) 14:10:03ID:???そんな肝に銘じたりマヌケなことするんじゃなくて、
トラブったときに自分で解決する心がけを身につければよいのでは?
0643nobodyさん
2006/05/06(土) 17:03:35ID:???0644nobodyさん
2006/05/06(土) 17:59:26ID:???Apache::PerlRun + perlcc -B
perlの場合現実的な解の有力候補だと思う。
Apache::PerlRunの欠点をperlcc -Bで補う。
perlccは効果薄いと言われてますが、遅いPCではかなり効く。
http://rintaro.dip.jp/nicky/index.html
メリット
導入容易
対象プログラム多
リソース消費小
デメリット
スピード面では最高ではない。
0646nobodyさん
2006/05/07(日) 11:09:46ID:???バイトコンパイルは俺も試したが確かに効く。
perlccが効かないとされてる記事はどれも単純なバイトコンパイルではないよ。
実行ファイルにまでコンパイルしている。
しかし、
Apache::PerlRun + perlcc -B
これ本当に動くの?
SpeedyCGI + perlcc -Bはバイナリいじれば動いたがコマンドラインオプション一切受け付けなくなった。
0647nobodyさん
2006/05/09(火) 01:34:46ID:???0648nobodyさん
2006/05/09(火) 14:05:03ID:???>perlcc使うくらいなら、Cで書き直せばいいのに。
はあ?
perlcc -Bはただのバイトコンパイルですが。
Emacs Lispのバイトコンパイルと全く同じ。
0649nobodyさん
2006/05/09(火) 14:11:41ID:???痛すぎる。
>644
>perlccは効果薄いと言われてますが、遅いPCではかなり効く。
>http://rintaro.dip.jp/nicky/index.html
読んでみたほうがいいかと。
0650nobodyさん
NGNG0652nobodyさん
2006/05/09(火) 15:00:50ID:???>646
>perlccが効かないとされてる記事はどれも単純なバイトコンパイルではないよ。
>実行ファイルにまでコンパイルしている。
0653nobodyさん
2006/05/09(火) 15:12:44ID:???禿げしくスレ違いだな。
俺様が教えてやる。
perlccで作る実行ファイルはCの中にperlのバイトコードを埋め込んだもの。
perlcc -B はperlのバイトコードを作る。
バイトコードは通常のソースと同じように、perlインタープリタが実行できる。
でFA。
0654nobodyさん
2006/05/09(火) 22:01:15ID:???環境は
Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-16 mod_perl/1.999.21 Perl/v5.8.4
です。
CGI/1.1と表示されます。
0655nobodyさん
2006/05/11(木) 06:30:48ID:???>>http://rintaro.dip.jp/nicky/index.html
>読んでみたほうがいいかと。
>>>グローバル変数の初期化だけ追加すればいいのですがグローバル変数を探すのが大変です。 なにしろnicky.cgiは6000行あるのです。
この時点で、すでにアウトなんでない?
0657nobodyさん
2006/05/11(木) 13:09:16ID:???漏れは、兵庫県や日本生命のプロジェクトでPGしてた。
6000行のソース読んでグローバル変数割り出すのは丸1日では無理。
>http://rintaro.dip.jp/nicky/index.html
これで割り出せているのは幸運。
use strict 'vars';
これは別に万能ではない。
0659nobodyさん
2006/05/11(木) 14:32:43ID:???俺もSQLやJAVA、VBでPGをしていた。
数万行のソースは普通だが、
>http://rintaro.dip.jp/nicky/index.html
の意見はまっとうだと思うな。
SQL、JAVA、VBは生産性がいいから大規模プロジェクトで使われる。
0660659
2006/05/11(木) 14:37:37ID:???mod_perlはメモリを消費しすぎるし、しかも開放しない。
ちょっと勧められない。
0661nobodyさん
2006/05/11(木) 19:31:33ID:???今時、生産性を考えたら Java なんか使えるかよ。
Perl じゃなくても、PHP や Ruby でシステム組んで、マシン足しゃいいんだ。
0662nobodyさん
2006/05/11(木) 21:03:06ID:???0663659
2006/05/11(木) 21:13:02ID:???ASPもJSPもPLSQLもステップ実行できない環境で開発したなら、遅いもんだよ。
原因不明のバグは必ず出るだろ。
mod_perlなんか使ったらどうやってデバッグするの?
print?
それはまずいだろ。
0665nobodyさん
2006/05/11(木) 21:35:54ID:???0666nobodyさん
2006/05/11(木) 21:37:09ID:???> それはまずいだろ。
それはまずいな。
普通はデバッガだろう。
printしか思い浮かばないようじゃ、
それはまずいな。
0667nobodyさん
2006/05/11(木) 21:41:20ID:???昔悩まされたのでトラウマが...
0669nobodyさん
2006/05/11(木) 22:10:45ID:???0670nobodyさん
2006/05/11(木) 22:15:05ID:???個人で書いたのはほとんどそうだが。
0671nobodyさん
2006/05/11(木) 22:19:31ID:???MT?
0672nobodyさん
2006/05/11(木) 22:25:40ID:???自作だとSledgeかCatalystで書いて気分でmod_perl下で動かす
こともあるとかそんな感じ。mod_perl専用にガリガリ書くことは
ないな。
0673nobodyさん
2006/05/11(木) 22:28:37ID:???0674nobodyさん
2006/05/11(木) 22:43:27ID:???Apache+mod_perlでCGIを使うには?
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html
0675nobodyさん
2006/05/11(木) 22:56:38ID:???2. ロードされたスクリプトは実行後もメモリにキャッシュされる
これ読むと、localもキャッシュされるような説明ですが、誰か説明してください。
0679nobodyさん
2006/05/12(金) 01:46:25ID:???ここの説明はあまりないんだよなあ。
0680679
2006/05/12(金) 01:58:27ID:???スマソ。
CGIで動作するときは、再度呼び出しても記憶しているが、スクリプト自体が終わったら当然破棄されるよな。
mod_perlってここも残るのかな?
0681679
2006/05/12(金) 02:09:01ID:???休みに自分で試しますわ。
0682679
2006/05/12(金) 04:24:41ID:???Perlよく知らんのでlocal変数ってスタティック変数と思ってました。
スクリプト書いてみて知りました。
ローカルな変数なのね...
はずかしす。
0683nobodyさん
2006/05/12(金) 08:26:22ID:???localの認識もまだ違うっぽい。
あと、日本語ドキュメントに絞って調べてるなら古かったり間違った情報に注意。
0684nobodyさん
2006/05/15(月) 01:31:28ID:???俺様も最初はここに住み着いてる奴らと同じくcgiをRegistryに喰わせて
喜んでたクチだが、仕事でPerlのcgiを動かすのはごく希。今では、
複数サーバ間のシングルサインオンの仕掛けをmod_perl + DBI で
組んだりしとる。アクセス制御系のmoduleを組むことが多いかな。
ヘタレなので、Cでmoduleは書けん。やっぱmod_perlは便利。
0685nobodyさん
2006/05/15(月) 02:19:30ID:???そうなんですよね。
アパッチの太り方は尋常ではないです。
アクセラレータと考えれば、FastCGI、SpeedyCGIが圧倒的に上。
mod_perlの真価はPerlでApacheモジュール書けることなんですよね。
というか、最初からそのための物だし。
0686nobodyさん
2006/05/16(火) 01:18:40ID:???ここは WebProg 板だし,>>1 の趣旨からして mod_perl で CGI の話題メインでも良いのでは?
ただ,>>685 でも言われるとおり,mod_perl の神髄は Perl でハンドラ書いて Apache を Hack
できることに尽きる。ResponseHandler とか OutputFilterHandler が取っつきやすいと思う。
Apache の内部処理に対する理解も深まるので,やって損はないと思うけどな。
CGI に飽きたら,Apache Hacking をお勧めしたい。
0687nobodyさん
2006/05/16(火) 02:33:50ID:???話すことなんてないよ…。
0688nobodyさん
2006/05/16(火) 19:05:42ID:???>CGI メインって、普通に書いて Registry に食わせりゃ動くのに、
釣りはいかん。
mod_perlは最も制約が多い。
>話すことなんてないよ…。
同感。
FastCGI、SpeedyCGIに比べデメリットは目立つがアドバンテージが感じられん。
体感速度は変わらんし、ベンチ対決も特に勝ってるわけでもない。
0692nobodyさん
2006/05/16(火) 23:11:37ID:???ずいぶん抽象的な言葉がお好きですね。
use strictはある意味使うべきとは思います。
しかし、グローバル変数を初期化するのはスクリプト本来の姿ではないですが。
カレントディレクトリも本来のPerlとは違うはずですが。
それでも「普通」というならApache::Registryが標準なんでしょう。
0695nobodyさん
2006/05/16(火) 23:23:23ID:???> また抽象的なんですが。
質問文なんですが、抽象的に見えますか?
> > 頭のほうよろしかったでしょうか?
頭のほうがよろしかったかどうか聞いています。
よろしかったか、よろしくなかったかで答えることが可能です。
> 具体的にどこがおかしかったか指摘してください。
「おかしかった」とは一言も言ってませんね。
0696nobodyさん
2006/05/16(火) 23:27:23ID:???この一言で終われば抽象的です。
その上今度は
>「おかしかった」とは一言も言ってませんね。
とくる。
意味がわかりません。
0697nobodyさん
2006/05/16(火) 23:29:05ID:???聞いてあげるので、なにをもって抽象的としたいのかご説明どうぞ。
> 意味がわかりません。
頭のほうがよろしくないということでしょうか?
0698692
2006/05/16(火) 23:36:05ID:???>ずいぶん抽象的な言葉がお好きですね。
>
>use strictはある意味使うべきとは思います。
>しかし、グローバル変数を初期化するのはスクリプト本来の姿ではないですが。
>カレントディレクトリも本来のPerlとは違うはずですが。
>それでも「普通」というならApache::Registryが標準なんでしょう。
これが私の発言。
それに対し
>>693
>頭のほうよろしかったでしょうか?
「聞いてあげるので、なにをもって抽象的としたいのかご説明どうぞ。」
指摘が全く具体的でないのでので抽象的としたいです。
0699692
2006/05/16(火) 23:38:57ID:???>687
CGI メインって、普通に書いて Registry に食わせりゃ動くのに、
話すことなんてないよ…。
このずれた感覚を説明願いたい。
0700nobodyさん
2006/05/16(火) 23:41:55ID:???三省堂 大辞林 第二版 によると、「抽象的」とは、
> (1)概念的で一般的なさま。
> (2)事物を観念によって一面的にとらえ、実際の有り様から遠ざかっているさま。
ということで、具体的でないからといって、抽象的としてしまうのは
いかがなものかと思います。
0701692
2006/05/16(火) 23:46:20ID:???私は辞書などいちいちひきませんが、具体的と抽象的は中学生が習う反対語とかいうやつです。
「指摘が全く具体的でない」場合は、「抽象的としたい」のですね?
その通りです。
0702nobodyさん
2006/05/16(火) 23:49:18ID:???デマですね。
0703692
2006/05/16(火) 23:50:17ID:???もう止めます。
0704nobodyさん
2006/05/16(火) 23:53:30ID:???ある意味って何だろう。
0705687
2006/05/16(火) 23:58:06ID:???なんか勝手に同一人物にされてる…のかな?
単に >>686 を受けて、「mod_perl で CGI の話題」で何を話すことがあるんだ、
Apache ハンドラの話をする方がいいじゃないか、と言いたかっただけなんだが。
設置に関するの話なら板違いだし、アクセラレータとしては FastCGI や
SpeedyCGI の方が優れてるのは誰が見ても明らかなので、議論すること自体が無駄。
パフォーマンス・チューニングの話とかなら大歓迎だが。
>>692
> use strictはある意味使うべきとは思います。
> しかし、グローバル変数を初期化するのはスクリプト本来の姿ではないですが。
> カレントディレクトリも本来のPerlとは違うはずですが。
お前は何を言っているんだ。
0707nobodyさん
2006/05/17(水) 13:29:41ID:???これくらいのサーバ(サーバ群)でこれくらいのアクセス数をさばける、みたいな。
0708nobodyさん
2006/05/17(水) 14:44:34ID:???0709nobodyさん
2006/05/17(水) 14:53:47ID:???0710nobodyさん
2006/05/17(水) 16:05:11ID:???> はてな・・・はトラブル多くて参考にならんね
トラブルが多いか否かって、どうやって評価するの?
藻前の主観ならイラネ。
■ このスレッドは過去ログ倉庫に格納されています