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

mod_perlを使おう!

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん01/11/07 17:42ID:+Gux2iOQ
CGIを激速で実行できるmod_perlについて語りませう。
関連リンク等は>2
0232nobodyさん03/02/05 22:21ID:???
>>231

>>4 じゃないの
0233nobodyさん03/02/05 22:26ID:bAuNqhq0
mod_perlの日本語の文献が少ない〜と思ってたけど、
オライリーの "Apache拡張ガイド" ってかなりイイですね。

単に「CGIを高速化したい」というだけの向きには
お勧めしないが。
0234nobodyさん03/02/06 06:59ID:???
自鯖持ってない人には結構敷居が高い気がするけど、
漏れもやってみたいんだな。実は。な厨房でした。
phpよりperlの方が、なんだかなぜだか好きなんだな、これが。
ま、別にどっちでもいいんだが。
0235nobodyさん03/02/28 07:13ID:lH1io3Lr
Perl 5.6.1
mod_perl 1.27
Apache 1.3.27

Vine Linx 2.6r1

で mod_perl を利用したスクリプトを書いてます。
そこで問題が発生したのですが、
普段は正常に動作してくれるものの、
稀に下記のようなエラーを吐きます。

[error] Undefined subroutine &Apache::Registry::handler called.

そのエラーの後暫く時間を置くと、また正常に動作してくれます。

どのような原因が考えられるでしょうか?
0236山崎渉03/03/13 17:10ID:???
(^^)
0237山崎渉03/04/17 12:25ID:???
(^^)
0238山崎渉03/04/20 06:09ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0239nobodyさん03/05/06 13:26ID:???
きちんと use strict および my 宣言しているのですが、
前回処理のときの値が変数に残る場合があります。

原因がまったくわかりません。
0240nobodyさん03/05/06 15:44ID:???
>239
とりあえず スクリプトさらせ
そしたらみてやる
0241nobodyさん03/05/10 20:51ID:HZb4mCK8
>239
my $scalar="";で応急対処とか。
perl -wで起動してみるとか。
0242nobodyさん03/05/10 23:01ID:???
>>239
抽象的なヒント。

ちゃんと消滅させないと再利用されてしまうぞ。
0243山崎渉03/05/22 02:04ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
0244山崎渉03/05/28 17:19ID:???
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0245nobodyさん03/05/28 19:30ID:???
モドパ
0246nobodyさん03/06/28 01:43ID:LpyzQ0Fu
Active Perlのppmじゃmo_perlは使えないんですか?
0247nobodyさん03/06/28 07:24ID:???
>>246
帰れ。
0248山崎 渉03/07/15 11:10ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0249nobodyさん03/07/25 23:37ID:???

0250nobodyさん03/07/26 13:11ID:???
オブジェクト指向で、安全性確保できないPerl+mod_perl。
@ISAつかったら、その時点で、セキュリティ上大問題。
mod_perlの存在理由が問われるわけだが。
0251nobodyさん03/07/28 01:40ID:ZmLsz+tt
PerlコミュニティーはPHPのようなサーバーサイドスクリプトの
開発には興味ないのかな?
PSP(Perl Server Pages)なるものがあったけどもっと本格的な奴
作ってほしいなぁ。
0252nobodyさん03/07/28 17:48ID:???
>>251
HTML::Mason
HTML::Embperl
Apache::ASP
があるわけだが・・・
0253nobodyさん03/07/28 23:56ID:???
>>251
最近はPHP自身そこから足を洗おうかという風潮だし。
0254nobodyさん03/07/29 00:08ID:VHYtOhh7
>>252
よく知らないのだけど、それらの実行速度はPHPなどと比べて
速度的に遜色のないものなの?
0255無料動画直リン03/07/29 00:13ID:2mrfBZ5M
http://homepage.mac.com/miku24/
0256nobodyさん03/07/29 00:16ID:kW5HsU6r
☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★ 送料激安!  スピード発送!  商品豊富!   
★☆      http://www.get-dvd.com        
☆★ 激安DVDショップ 「GETDVDドットコム」 
★☆      http://www.get-dvd.com        
☆★ 今すぐアクセス Let’s Go!   急げ! 
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
025725203/07/29 19:22ID:wrNh0omf
>>254
252のようなもの使うならperl使わずに
PHP使った方が無難。
速度はmod_perlならそんなにかわんないじゃないの?

といっても最近はテンプレートで表示するのが普通っぽくなってきたから
PHP+smartyもしくはmod_perl+html::templateのどっちか、
っていうわけか。
0258nobodyさん03/07/29 19:22ID:al0J9pjR
キキキタタタタ━━━((゜(゜∀゜)゜))━━━!!!!PART1
http://link.iclub.to/adalt/
http://link.iclub.to/amazon/
http://link.iclub.to/docomo/
http://link.iclub.to/google/
0259nobodyさん03/07/29 22:16ID:VHYtOhh7
Perl/CGIを、Windowsサーバーならperl2exeで、UNIX系ならPerlccで
バイナリにしてしまえば速度は速くなる?
0260nobodyさん03/07/29 22:19ID:VHYtOhh7
>>257
PHP(mod_php)に比べてmod_perlって何であんなに知名度に差があるの?
あとPHPはANHTTPDやIISなどにも対応してるけど、mod_perlは
Apacheのみだし・・・
0261nobodyさん03/07/29 22:22ID:???
>>260
ただ使いにくいから。
0262nobodyさん03/07/29 23:33ID:???
使えないんだろ?(プ
0263nobodyさん03/08/01 22:02ID:???
>>260
mod_perlといえば、アパッチ::レジストリな訳で。
↓
アパッチ::レジストリといえば、オブジェクト指向必須な訳で。
↓
ところが、Perlのオブジェクト指向は痛い訳で。
↓
そんなもの使いたくないって訳で。

ってのが、現状だろう。
専用サーバだったら、他にも良い言語、アプリ鯖いっぱいあるしね。
mod_perlはマニアックなとても逸品です。
0264nobodyさん03/08/02 01:05ID:???
( ´_ゝ`)フーン。それで?
0265山崎 渉03/08/02 02:23ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0266ぼるじょあ ◆ySd1dMH5Gk 03/08/02 04:51ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
0267nobodyさん03/08/02 04:53ID:???
>>263
Apache::Registryとオブジェクト指向は
使用者にとっては何の関係もないわけだが・・・
0268nobodyさん03/08/02 06:22ID:???
> ところが、Perlのオブジェクト指向は痛い訳で。

んなの、プログラミングする人間の勝手だと思うがな。
0269nobodyさん03/08/26 14:21ID:???
>Apache::Registry
>Perlで作成したモジュールを実行する際に1度だけモジュールがコンパイルされ、メモリに常駐する。

となってますがどのくらいの時間常駐するのでしょうか。
永続的な常駐ならサーバのメモリ食いつぶしちゃうような…
#一人だけならともかく皆がやったりすると
気にするほどでもない?
0270nobodyさん03/10/08 23:31ID:TFC4ht6F
age
0271nobodyさん03/10/09 06:04ID:???
皆で使うってどういうことだ。
0272nobodyさん03/10/09 10:48ID:???
共有鯖ってことでしょ
共有でmod_perlは無謀と思うのだが
0273nobodyさん03/10/10 05:29ID:BH1wn/9y
RegistryじゃなくてPerlRunだったら共有鯖でも平気?
0274nobodyさん03/10/10 13:58ID:???
suexec 使えなくて良いなら平気なのかも
0275nobodyさん03/10/10 21:04ID:???
カレントディレクトリが移動しちゃう問題をなんとかしたいんですけど、
ソースを書き換えたら直りますか?
0276nobodyさん03/10/12 09:33ID:5sejX4lf
mod_perl、mod_phpでsuexecを機能させてみたいな。
システム領域をオーバーライドするしか方法はないだろうけど。
suexecのソースを読んでみよう
0277nobodyさん03/10/12 09:43ID:???
>>276
apacheをrootで動かす気かい?
0278nobodyさん03/10/12 09:49ID:5sejX4lf
>>277
Apacheは例によってapacheユーザで動作。
カーネルに関わるプログラムをsetuidして子プロセスの実行権限を動的にするしかないんじゃないだろうか。
擬似的にApacheが複数のUIDで動作すると。suexecより危険度が増すけど
0279nobodyさん03/10/12 12:02ID:???
1ユーザーごとに1つApacheを動かして、マルチスレッドにしておけば良さそう。
0280nobodyさん03/10/12 13:30ID:5sejX4lf
メモリがいくつあても足りないと思う
0281nobodyさん03/10/12 13:31ID:???
いくつ?512MBのメモリをひとつ刺しておけばいいんじゃない?
0282nobodyさん03/10/12 13:53ID:5sejX4lf
そういう問題だけじゃないよ。
CPUが追いつかない。
Apache2なら可能性はあるが
0283nobodyさん03/10/30 15:43ID:MsIzuyZ0
mod_perlもmod_phpのように手軽に使えるようにならん?
そうすれば普及するだろうに。
0284nobodyさん03/10/30 15:53ID:???
互換性がちょっとな・・・
0285nobodyさん03/10/31 22:38ID:???
>>284
CGIプログラムとの互換性のこと?
そんなに変わってくるものなの?
0286nobodyさん03/11/04 18:16ID:???
>>285
・exit();関数は利用できない。代わりに、Apache::exit();を使うそうな。
・パッケージ名を明記すると500 Internal(以下略)。(例: $main::setup)
・SuExecが有効にならない
・もし何かあったら、Apache自体を再起動しなければならない
・mod_perl用に書いたPerlScriptをCGIとして動作させたら、多分動かない。

 知っている限りで。(注:正確な情報ではありません)
0287nobodyさん03/11/04 19:42ID:???
>>286
互換性の問題は速度の代償として多少は仕方ないか。

>・もし何かあったら、Apache自体を再起動しなければならない

ここら辺はmod_phpでも同じなのでは?
0288 03/11/04 20:55ID:1kmjwkim
大規模なeコマースサイトを Apache と mod_perl で構築する
http://bulknews.net/lib/doc-ja/etoys.ja.html
0289nobodyさん03/11/04 22:08ID:???
>>286
・Apache::Registry 使用時なら exit は Apache::exit でオーバーライド
 されていたような。
・main パッケージを明示するようなコーディングスタイル自体が問題。
・CGI プログラムとして組まれているスクリプトは Apache::PerlRun で
 動かす。mod_perl 前提のスクリプトを CGI プログラムとして使うのは
 おかしい。

SuEXEC が効かないのと、httpd の肥え方が激しいのがネックだと思う。
まぁ後者はサーバ分ければいいんだけど。

あと mod_perl 入れたからといって CGI プログラムが使えなくなる
わけじゃないので、Apache::PerlRun でも動かんような糞スクリプトは
割り切って CGI プログラムとして使うのも手。
0290nobodyさん03/11/05 00:00ID:???
mod_perler なら、Apache::Registry使わなきゃ
Apache::PerlRunで満足すんなYO!



ところでさア、お金貸して?
0291nobodyさん03/11/16 07:02ID:???
Action text/html /path/to/cgi
みたいな感じで、テキストを置換するシステム作ってたんだが
XeonMP 2.8G でさえ、30req/sがやっとこさだったのだが、
PerlRun にしたら、100req/s 程度まで向上した。

男はApache::Registryだろうということで、試してみたんだが、
案の定あちこち手を入れないとウゴカナカタよ。

それでも、バックエンドDBアクセスナシで700req/s
DB接続ありで200req/s行ける感触をつかんだので
かなり満足。

行き着く先はCでApacheモジュール化なのだが、そうすると
DBIのような統一インタフェイスが使えずDB依存になってしまうのが辛い。


上のカキコで PATH_INFO 云々の話が出てたが、ウチで試したときは
アクションハンドラとして呼ばれないときも
PATH_INFO=/
PATH_TRANSLATED=/path/to/www/ <- これファイルじゃネーし
とか出てきて少々面食らった。これはバグ? 実装上の都合?
0292nobodyさん03/12/28 05:05ID:???
しかし流行りませんなぁ。
0293nobodyさん04/02/03 03:55ID:6SsHdaLm
喚起あげ
0294nobodyさん04/02/10 21:22ID:YkFrJUBA
素朴な疑問なのですが、
mod_perl使ってる時にも通常のCGIとしてperlプログラム走るんですか?
0295nobodyさん04/02/10 22:35ID:???
ドテッ! ネタ?
0296nobodyさん04/02/11 14:36ID:???
Apache::PerlRunとApache::Registryどちらでも良いんだけど
HTML::Template使えますか。
0297nobodyさん04/02/11 17:34ID:8Wm4X/2a
mod_perl始めますた、ちょいと質問です。
皆さんは、

PerlSendHeader On

にしてますか?
mod_perlを使うなら Off だろ、とか、
漢なら Off にしとけ、とか、
なんかポリシーみたいなものってありますか?
0298nobodyさん04/02/11 19:17ID:???
   / ̄ ̄ ̄ ̄ ̄ ミ
  /   ,――――-ミ
 /  /  /   \ |
 |  /   ,(・) (・) |
  (6       つ  |
  |      ___  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |      /__/ /  <  mod_perlを使うなら Off だろ!
/|         /\   \__________
0299nobodyさん04/02/13 21:16ID:???
>>296
使える
0300nobodyさん04/02/14 12:13ID:???
C:\Program Files\Apache Group\Apache2\bin>apache -t
Syntax error on line 159 of C:/Program Files/Apache Group/Apache2/conf/httpd.conf:
Cannot load C:/Program Files/Apache Group/Apache2/modules/mod_perl.so into server: 指定さ
れたモジュールが見つかりません。

_| ̄|○ファイルあるのに…
0301nobodyさん04/02/14 12:46ID:???
mod_perlが流行らないのは、
やっぱ、スクリプトの制限がキツくなるからってことでおk?
0302nobodyさん04/02/14 13:15ID:???
Apache::PerlRun だとたいした制限は無いんだが

ISP屋の立場から言うと、suExecできないのが一番痛い
0303nobodyさん04/02/14 17:02ID:???
WinのApache2にmod_perl!?よくもまあ・・・
0304nobodyさん04/02/14 21:38ID:???
>>303
何が悪いのか教えれくらはい。
0305nobodyさん04/02/14 21:57ID:???
頭とセンスg(ry
0306nobodyさん04/02/16 00:45ID:???
>299
ってことはやり方が悪いという事かな……orz

>303
設計とかテストとかやるときはローカルのWin鯖でやってますが
UNIX版と違い出るんですか。
0307nobodyさん04/02/16 10:29ID:???
>>306 そもそもOSレベルで違うじゃん…
Windowsネイティブapache2のモジュールって拡張子.soだっけか?
0308nobodyさん04/02/16 12:42ID:???
スクリプトの書き方一緒じゃないの?
0309nobodyさん04/02/16 15:49ID:???
>>307
一応、soだよ

まあ、動くかどうかのテストはWinでもいいんじゃないかな
ベンチマークや負荷のテストは意味ないけど
0310nobodyさん04/02/16 16:28ID:???
apache と mod_perl って両方とも Winネイティブなんかな?
apache はwinネイティブで mod_perl が cygnus だったら 動かないとか。
もう少し詳しく書かないとなんとも言えないんじゃないかなぁ
0311nobodyさん04/02/16 16:37ID:???
「指定されたモジュールが見つかりません」の場合
ファイルは見つかっても何らかの原因でメモリへのロードに失敗している
というケースが実際にはほとんど

原因はバージョン不整合とかいろいろ考えられるが
まあ地道に切り分けるしかないな
0312nobodyさん04/02/16 16:53ID:1pUxS5fU
色々な所を参考にして mod_perl を組み込んで見ました。
そして以下のテストスクリプトを二種類の方法でちゃんと動作しているのですが、
CGIとして呼び出されてるのか、mod_perl として呼び出されているのかサッパリでして、、
確認する方法ってのはありますか?

## /home/user/perl/test
#!/usr/bin/perl -w
use strict;
print 'content-type: text/plain; charset=EUC-JP' . "\n";
print "\n";
print join("\n", map "$_ = $ENV{$_}", sort keys %ENV);

## httpd.conf
Alias /perl/ /home/user/perl/
Alias /cgi-bin/ /home/user/perl/
<Location /perl>
SetHandler perl-script
PerlHandler Apache::Registry
Options ExecCGI
PerlSendHeader On
</Location>

<Location /cgi-bin>
SetHandler cgi-script
Options ExecCGI
</Location>

http://hoge.com/perl/test -> OK.
http://hoge.com/cgi-bin/test -> OK.
0313nobodyさん04/02/16 17:44ID:???
思いつきだが、↓みたいなのでどうだ?

#!/usr/bin/perl -w
use strict;
print 'content-type: text/plain; charset=EUC-JP' . "\n";
print "\n";
print `ps aux | grep perl`;
0314nobodyさん04/02/16 17:55ID:???
>mod_perlで実行されている場合には、環境変数の $ENV{GATEWAY_INTERFACE} に
>'CGI-Perl/1.1' が設定されます。(通常CGIは 'CGI/1.1')
>また、'MOD_PERL' 環境変数が設定されます。(mod_perlのバージョンが設定される)
031531204/02/17 12:47ID:???
>>313-314
返事ありがとう。
早速試してみようと思ったんですが、
なんか電源が入らない、、orz、、bios すら起動しねーーーー

出直してきます。。(つд`;)
031631204/02/18 19:28ID:???
>>313-314
試して見ました。

## /perl/test
GATEWAY_INTERFACE = CGI-Perl/1.1
MOD_PERL = mod_perl/1.29

## /cgi-bin/test
GATEWAY_INTERFACE = CGI/1.1

問題なく動作しているようです、有難うございました。

ところで別の疑問なのですが、
CGI経由で動作している時には suEXEC で動作して欲しいと思って
suEXEC 有効にしてみました。

/perl/test -> nobody権限
/cgi-bin/test -> user権限

今の所正常に動作していると思うのですが、これって問題ない、、ですか?
どこのサイト見ても suEXEC は無効にしとけー、
てな事しか書いてなかったので少し不安なのです。
0317nobodyさん04/02/18 20:04ID:???
mod_perl で Apache::Registry、Apache:PerlRun で CGIスクリプトを実行すると、
mod_perlが組み込まれている httpd のプロセスの中で動いてしまうのでsuexecは効かない

CGI経由で別プロセスで動かすからこそsuexecが有効
0318nobodyさん04/02/29 04:50ID:yMfKis4M
http://dream.lib.net/room/cgi/download.html#link で公開されている Ranking link
というCGIを自サーバーで動作させたのですが、試してみると結構な確率で真っ白な画面が
ブラウザに表示されます。
このCGIは実績があるのでこのCGIのせいではなくて、mod_perlのせいなのだと思うのですが、
解決策が全くわかりません。 助けてください・・・。
環境は、
OS: Redhat 9.0
WebServer: Apache1.3.29
mod_perl version 1.29
perl 8.5.1
です。
OS以外は全てソースからコンパイルしてインストールしました。

0319nobodyさん04/02/29 05:49ID:???
mod_perlが使える鯖ってありますか?
0320nobodyさん04/02/29 07:26ID:???
ありません
0321nobodyさん04/02/29 11:32ID:???
>>318
助けてやりたいのはやまやまだが
318 に書かれた情報だけでは何とも手の差し伸べようがない

error_log に何が吐かれてるか確認する前に 318 を書いたのだとしたら
君の罪は麻原並に重い
0322nobodyさん04/02/29 11:34ID:???
>>318
こんなコーディングじゃ mod_perl は誤動作するのが当たり前田
0323nobodyさん04/02/29 11:41ID:???
>319
XREA
0324nobodyさん04/02/29 12:07ID:???
>318
眺めたところそのスクリプトのせいのような気が……。
032531804/02/29 15:21ID:yMfKis4M
>322
>324

どの辺りか教えて頂ければ幸いです・・。 お願い致します。

>321
エラーは一切吐かれていませんし、ブラウザで500番エラーが
表示されることもありません。




0326nobodyさん04/02/29 18:41ID:???
実績のあるプログラムだからといって、
mod_perl で動くかというとそうとは限らない。
0327nobodyさん04/02/29 21:39ID:???
KやRのはmod_perlではまともに動かんぞ。
0328nobodyさん04/03/01 06:28ID:???
正しくは、全Perlコードをパッケージで管理しなければ、
mod_perlでは、正しく動きません。または、高速動作できません。
0329nobodyさん04/03/01 10:01ID:???
Apache::PerlRun でもそうなの? > 要パッケージ管理
0330nobodyさん04/03/01 22:21ID:???
だからmod_perlは流行らない〜♪
0331nobodyさん04/03/02 21:16ID:O+pQat/o
ふぅ、やっとApache::ASPが動いたよ。
これってmod_perlだけじゃなく、
全てのモジュールをstaticで構成しないと駄目だったのね。

mod_perlだけだと思って何度も何度もやり直してしまいました。。
■ このスレッドは過去ログ倉庫に格納されています