【激速】mod_perl SpeedyCGI FastCGI【激速】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/05(月) 20:01:09ID:+YcYjDiDhttp://perl.apache.org/
SpeedyCGI
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod
前スレ
mod_perlを使おう!
http://pc8.2ch.net/test/read.cgi/php/1005122528/
ー二三ヘ( ゚∀゚)ノ
0825_
2009/04/01(水) 14:59:15ID:???どうよ
0826nobodyさん
2009/07/16(木) 22:14:00ID:Gas3E2EYrequiresメソッドは「カレントディレクトリとその親ディレクトリに存在するすべてのrequireディレクティブ…」を取り出すって書いてあるけど、間違いじゃないか?
継承はするけど追加じゃなくて上書きするから、すべてじゃないよね。
0827nobodyさん
2009/07/25(土) 21:10:58ID:0I94bAC0環境:debian+lighttpd+fcgi(C)
FCGI_printfで
Cntent-Length: xxxxとかConnection: closeとか
付けてるつもりなんですけど、
実際にクライアントと通信させると送られてきません。
(勝手にチャンク転送になったりします)
あとFCGIでプロキシみたいなものを作ろうとしていて
while(1){
r_ret = recv(socket, buf, sizeof(buf), 0);
FCGI_fwrite(buf, r_ret, 1, FCGI_stdout);
}
みたいなコードを書いてますがFCGI_fwriteで書き込んだ
データ全てが送られないのですが、
(recv終了時点ではnバイトのデータを持ってても、
クライアントにnバイト送られなかったり)
コードで指定してるとおりに動作させたいんですが
lighttpd.conf等の設定が悪いんでしょうか?
0828nobodyさん
2009/07/25(土) 21:19:56ID:???例えばApacheの場合は、Content-LengthとかConnectionとか
そういうのを取り扱うのはHTTPサーバーの役割だって考えだから、
CGIがそういうヘッダを付けてもApacheの都合で勝手にkeepaliveになったりチャンク転送になったりする
Apacheだろうとlightyだろうと、そういう思想が正しいと思う。
CGIはコンテントの中身だけ出してればいい。
そんなHTTPの範囲まで口を出すな、と。
0829nobodyさん
2009/07/25(土) 23:13:36ID:???そのときも勝手にチャンクになったりしてたのは確認してました。
CGI系共通の動作なんですかね。
(Content-Length教えたのに削除するってのは微妙ですけど)
2番目の方はBODY部が変わるって致命的な動作なんで
なんかいい解決方法があればいいのですが
0830nobodyさん
2009/07/25(土) 23:17:20ID:???それは「BODYが変わった」とは言わないと思う。
チャンク転送がいやならHTTP1.0でリクエストすればいいのでは?
0831nobodyさん
2009/07/26(日) 00:40:26ID:???>あとFCGIでプロキシみたいなものを作ろうとしていて
>while(1){
>r_ret = recv(socket, buf, sizeof(buf), 0);
>FCGI_fwrite(buf, r_ret, 1, FCGI_stdout);
>}
ってほうの話です
チャンクとか抜きにしても明らかに不完全なデータしか
送られないって動作になるんです
追加情報ですが
1回あたりのFCGI_fwriteで書き込むサイズは256kBくらいです
0832nobodyさん
2009/07/26(日) 08:57:56ID:???FastCGI応答処理にて
Content-LengthなどCGIで削除される情報を消してContent-Typeだけにしたら
BODYの情報が書き換わるということはなくなりました
0833nobodyさん
2009/10/12(月) 09:35:39ID:Ndxd3B+x通常のCGI(perlです)でSTDERRに向かって出力するとapacheがエラーログの方に
それを出力してくれるんですが、mod_speedycgi環境下で動かすと全く出てきません。
CGIの方を「#/usr/bin/speedy」とするとちゃんと出る(ある意味当たり前)ので、
mod_speedycgiのstderrの扱いがおかしいのかと思ってソースみたけどわけわかめ。
どなたか解決方法ご存じでしたら教えてください。だいぶググったけど見つからない・・
0834nobodyさん
2009/10/17(土) 04:35:47ID:???0835nobodyさん
2009/10/22(木) 16:22:16ID:???とりあえずmod_speedycgi2.cあたりから見よう見まねでパッチ書いたら
うまくSTDERR -> エラーログに出るようになりました。
(長期間動かしたときどうなるかなどは未検証ですけど)
0836nobodyさん
2009/12/13(日) 20:12:02ID:???一番新しいSpeedyCGI(mod_speedycgi/Apache2.2.3)のやつインストールして
SpeedyCGIで普通のやつ(hello worldとか)は動くのだけど
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod
のサンプルコードが500errorで動かないのだけどヤバイかな…?
誰かご教示ください
0837nobodyさん
2009/12/13(日) 23:00:07ID:???sub内のdo something hereのとこは適宜にシャットダウン時やクリーンアップ時に行う
処理を書いておくところだよ。詳しくはメソッドの解説を参照。
#!/usr/bin/speedy -- -r1 -t1
$sp->add_shutdown_handler(sub { `touch shutdown` });
$sp->register_cleanup(sub { print "b" });
とかにすれば一応動きがわかるんじゃないかな
./speedy.pl
ls
の繰り返しで。
0838nobodyさん
2009/12/13(日) 23:00:48ID:???#!/usr/bin/speedy -- -r3 -t100
かね
0839nobodyさん
2009/12/13(日) 23:30:38ID:???[root@localhost hogehoge]# ./speedy.pl
Can't call method "add_shutdown_handler" on an undefined value at ./speedy.pl line 2.
そもそもadd_shutdown_handlerが無い的な感じなのかしら。
>>838
同じように試してみたけども、だめでした。
0840nobodyさん
2009/12/13(日) 23:48:54ID:???すみません。
[root@localhost hogehoge]# ./speedy.pl
syntax error at ./speedy.pl line 8, near "do something here "
syntax error at ./speedy.pl line 10, near "do something here "
Execution of ./speedy.pl aborted due to compilation errors.
speedy_backend[24310]: perl_parse error
speedy[24308]: Cannot spawn backend process
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.podの
# shutdownハンドラの登録
$sp->add_shutdown_handler(sub { do something here });
# クリーンアップ・ハンドラの登録
$sp->register_cleanup(sub { do something here });
ここが原因みたいです。
0841nobodyさん
2009/12/13(日) 23:57:28ID:???ほんと連レスすみません。
>>837の実行結果
[root@localhost hogehoge]# ./sp.pl
b
0842nobodyさん
2009/12/14(月) 11:36:32ID:???スクリプトが終わる際に登録した処理が行われるだけだけど。
Speedyのバックエンドが終わる際には、cleanupも終わって標準入出力閉じた後に
shutdownが行われる。そこはprintしても表示ができないのでわざと`touch shutdown` して
ファイルを生成している。いつそのファイルが作られるかを見てほしい。
たぶんタイムアウト(t)が迫った場合や再利用回数(r)が迫った場合に作成されると思う。
-r6 くらいにするとたぶん5回目の実行の際に作られるかな。
多分これを使えばSpeedyで動いてた間に蓄積したデータとか吐かせたりとか
有用な使い方できるんだろうけど、絶対動くような信用性があるかはわからんので
スクリプト内のグローバル変数で同じようなことを実現したほうが確実かも。
-r -t 自体結構信用ならないので、2chではshutdown_next_timeも活用してた気がする。
0843nobodyさん
2009/12/15(火) 21:02:36ID:???返信遅れてすみません。
rootで-r6 -t10でlsしながら実行したところタイムアウトが迫ったときに所有権がrootのshutdownファイルが
スクリプトと同じディレクトリに生成されるみたいです。
0844nobodyさん
2010/03/25(木) 04:47:09ID:???0845nobodyさん
2010/03/25(木) 08:47:59ID:???0846nobodyさん
2011/12/16(金) 19:35:41.49ID:???と同じような結果を取得する方法を探しているのですが、何かよいモジュールは
ありませんか?
0847nobodyさん
2012/02/28(火) 19:51:56.53ID:???Apache 2.2.22
mod_perl/2.0.4
activeperl 5.12.4
mod_perl でエラー発生したとき、CGI::Carp qw(fatalsToBrowser) が有効にならないのですが、
ブラウザでエラーとかを把握する方法ってあるのでしょうか?
0848nobodyさん
2012/04/14(土) 19:26:27.93ID:d0KbMnsL0849nobodyさん
2012/04/17(火) 19:01:39.19ID:???ないよね?
0851nobodyさん
2014/01/21(火) 18:35:02.53ID:yT6VQ/mu中の人がmod_cgidso作ったことからもわかるでしょ?
■ このスレッドは過去ログ倉庫に格納されています