トップページ⇒php
851コメント342KB

【激速】mod_perl SpeedyCGI FastCGI【激速】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/06/05(月) 20:01:09ID:+YcYjDiD
mod_perl
http://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/

ー二三ヘ( ゚∀゚)ノ
0685nobodyさん2007/10/15(月) 15:54:12ID:???
>>681
mod_perl で効果的に ithread 使うのが一番速い。
FastCGI だとスレッドの恩恵が少ない。

レンタルサーバだと一定時間を越えて動作するプロセス
情け容赦なく kill されるので
SpeedyCGI は利用できないと思った方が無難。
(SpeedyCGI に限らないが。)
0686nobodyさん2007/10/15(月) 16:30:46ID:???
use threadは使い物にならなかったけどuse ithreadは使いものになるのか。
今度試してみよう。
この板見て初めての収穫。
0687nobodyさん2007/10/15(月) 16:32:14ID:???
x: use thread / o:use threads
0688nobodyさん2007/10/15(月) 16:51:46ID:???
せめて試してから収穫かどうか判断しろよ
0689nobodyさん2007/10/15(月) 18:07:12ID:???
Apache が worker 動作してるなら試してみる価値はある。
一方で lighttpd + fastcgi で十分じゃないかと言う話も。
0690nobodyさん2007/10/15(月) 22:42:23ID:???
>>684

>SpeedyCGI をユーザホームディレクトリ配下にインスコする。

わからん。。。。。。。
普通にmakeしてもダメだろ?
0691nobodyさん2007/10/16(火) 00:58:26ID:???
>>686
Perl で ithread を使うための宣言が use threads だろ。
同じ物だよ。

>>690
「CPAN ホームディレクトリ」でググれ。
cpan コマンド使わずに手動でインスコするなら perl Makefile.PL PREFIX=$HOME とか
0692nobodyさん2007/10/16(火) 10:52:05ID:???
まじ?
それだったら期待できないな。
過去の経験からいえばperlのthreadsはメモリーの扱い下手過ぎ(過消費)。
スワップまでの寿命がかなり短くなる。
0693nobodyさん2007/10/16(火) 12:36:40ID:???
スクリプト言語は開発効率が高いって本当なの?
企業としては開発効率以外にも見るべき所があるでしょ
0694nobodyさん2007/10/16(火) 12:47:07ID:???
>>692
5.005 の thread (use Thread;) と 5.6 以降の ithreads (use threads;) は違う。
後者の場合も注意して作らないとメモリをジャブジャブ使うのは変わらないが。

>>683
場合によりけりだろう。
一般的には規模が大きくなればかえって効率下がることになってる。
個人的には規模が小さくても型付けの弱い言語は開発効率が低いと感じる。
0695nobodyさん2007/10/16(火) 16:20:31ID:???
そういう意味だったら試したのはithreadの方だったと思う。
でも、多分
Interpreter threads are different from "5005threads"
(the thread model of Perl 5.005)
by creating a new perl interpreter per thread and not sharing any data or state between threads by default.
とあるとおり、スレッド毎にinterpreter分のメモリーをガンって増やすから、凄いことになっちゃったのかな。
mod_perlだともしかしてこのinterpreter分が節約できるのか?
自分はコマンド用途で試してたから増え方にビックリしたんだけど。
0696nobodyさん2007/10/16(火) 16:50:51ID:???
ごめん。685 の文からしておかしかった。

mod_perl (2.x) は ithread を内部的に使ってる、だった。
で、プロセス毎に上限の設定されたスレッドプールで使いまわしてる。
0697nobodyさん2007/10/17(水) 16:52:12ID:???
mod_perl重いって話けっこうあるし、画像用の別サーバとか
普通ってかあたりまえな気はする。
別サーバといっても同じマシンに別のApache立ち上げるだけでいいわけだし
mod_phpにしてもメモリ食いだし、静的ファイル用に別サーバ用意するのは当たり前だとおもってたけどな・・
それで重いといわれても〜
0698nobodyさん2007/10/17(水) 16:54:27ID:???
あと開発効率はめちゃ高いと思うぞ
大規模なサイトでも機能ごとにちゃんと分けてあげたり普通につくれば普通に便利。
てか体が慣れてるので俺の中ではウェブ系はPerl以外ありえない
0699nobodyさん2007/10/17(水) 16:56:24ID:???
あとまったくすれ違いだけどphpってphp.iniで文字コード制御とかありえねーなといつも思う
と独り言
0700nobodyさん2007/10/17(水) 17:16:43ID:???
静的ファイルの話するには100番くらいレス戻さないとダメだが。

静的ファイルで速度出したいなら lighttpd も良い選択だと思われ。
0701nobodyさん2007/10/17(水) 19:51:25ID:???
それをいったら、実行はじめたスクリプト中で ini_set('mbstring.internal_encoding', 'EUC-JP'); とか
0702nobodyさん2007/10/22(月) 16:25:52ID:YWIr8Jbq
専用ならHTTP::Daemonで
まるごと組んじゃうとか、どうなの?
0703nobodyさん2007/10/23(火) 13:31:51ID:???
細かい処理考えるのめんどいからmod_jk + Net::AJP13に期待
0704nobodyさん2007/10/29(月) 01:19:53ID:???
ねえねえ、ひょっとして mod_speedycgi2 ってアパッチョ2.2系じゃコンパイル不可?

うち、Cent4で、自前makeしたAp2.2.6を/usr/local/apache2/にインスコして、
そのapxsを読み込ませるようにしてmakeしてみたんだけど、mod_speedycgi2.cでエラー100個くらい出て止まってしまう。
内容はなんかsyntaxErrorだとか、previous definition(定義済みの再定義?)がでまくるんだけど・・・。

ちなみにrpmからの2.0.59では一応makeは通る(でもtestでmod_系は全スキップしてしまう)。

どなたか2.2系で動かしてる人いませんか?
0705nobodyさん2007/10/29(月) 08:39:55ID:???
上のレスでさんざん既出のこれじゃないかな

http://rt.cpan.org/Public/Bug/Display.html?id=23920
0706nobodyさん2007/10/29(月) 22:49:20ID:???
>>705
やった〜。makeできたよママン。
ありがトン。
0707nobodyさん2007/10/30(火) 04:25:29ID:OsAJPMJ7
ねえねえ、ひょっとして mod_speedycgi2 ってアパッチョ2.2系じゃコンパイル不可?

うち、Cent4で、自前makeしたAp2.2.6を/usr/local/apache2/にインスコして、
そのapxsを読み込ませるようにしてmakeしてみたんだけど、mod_speedycgi2.cでエラー100個くらい出て止まってしまう。
内容はなんかsyntaxErrorだとか、previous definition(定義済みの再定義?)がでまくるんだけど・・・。

ちなみにrpmからの2.0.59では一応makeは通る(でもtestでmod_系は全スキップしてしまう)。

どなたか2.2系で動かしてる人いませんか?
0708nobodyさん2007/11/14(水) 00:27:32ID:MPH8wi6G
ねえねえ、ひょっとして mod_speedycgi2 ってアパッチョ2.2系じゃコンパイル不可?

うち、Cent4で、自前makeしたAp2.2.6を/usr/local/apache2/にインスコして、
そのapxsを読み込ませるようにしてmakeしてみたんだけど、mod_speedycgi2.cでエラー100個くらい出て止まってしまう。
内容はなんかsyntaxErrorだとか、previous definition(定義済みの再定義?)がでまくるんだけど・・・。

ちなみにrpmからの2.0.59では一応makeは通る(でもtestでmod_系は全スキップしてしまう)。

どなたか2.2系で動かしてる人いませんか?
0709nobodyさん2007/11/14(水) 06:43:19ID:vnJkUfbw
ねえねえ、ひょっとして mod_speedycgi2 ってアパッチョ2.2系じゃコンパイル不可?

うち、Cent4で、自前makeしたAp2.2.6を/usr/local/apache2/にインスコして、
そのapxsを読み込ませるようにしてmakeしてみたんだけど、mod_speedycgi2.cでエラー100個くらい出て止まってしまう。
内容はなんかsyntaxErrorだとか、previous definition(定義済みの再定義?)がでまくるんだけど・・・。

ちなみにrpmからの2.0.59では一応makeは通る(でもtestでmod_系は全スキップしてしまう)。

どなたか2.2系で動かしてる人いませんか?
0710nobodyさん2007/11/17(土) 13:53:14ID:???
ねえねえ、ひょっとして mod_speedycgi2 ってアパッチョ2.2系じゃコンパイル不可?

うち、Cent4で、自前makeしたAp2.2.6を/usr/local/apache2/にインスコして、
そのapxsを読み込ませるようにしてmakeしてみたんだけど、mod_speedycgi2.cでエラー100個くらい出て止まってしまう。
内容はなんかsyntaxErrorだとか、previous definition(定義済みの再定義?)がでまくるんだけど・・・。

ちなみにrpmからの2.0.59では一応makeは通る(でもtestでmod_系は全スキップしてしまう)。

どなたか2.2系で動かしてる人いませんか?
0711nobodyさん2007/11/17(土) 18:28:52ID:???
いい加減うぜえよwww
0712nobodyさん2007/11/24(土) 02:37:09ID:???
ちょっとlibapreq2について質問なんだけど、

make test した時の、
t/apreq/cgi テストは失敗するもん?

CPANから取って来た2.08と、FedoraのRepoから引っ張ってきた2.09-rcのsrc.rpm
からやってみたんだけど、両方これがエラーになる。

ググってみても、いくつかのBlogとかで
「make test いくつか失敗するけど無視する」
みたいなこと書いてあるし、ほんとにこれでいいんかい??

CentOS4.5,Apache2.2,mod_perl2.0.3
0713nobodyさん2007/11/24(土) 09:23:53ID:???
Blog (笑

どんなエラーかも書いてないし…これは酷い。
07147122007/11/25(日) 19:11:55ID:???
こりゃあきまへん。これこのTestでコケるようになってるわ、packageの構造的に。

>>713
エラーの内容ってこれ?
t/apreq/big_input....ok
t/apreq/cgi..........# Failed test 1 in t/apreq/cgi.t at line 62
t/apreq/cgi..........NOK 1# Failed test 2 in t/apreq/cgi.t at line 62 fail #2
t/apreq/cgi..........NOK 2# Failed test 3 in t/apreq/cgi.t at line 62 fail #3
t/apreq/cgi..........NOK 3# Failed test 4 in t/apreq/cgi.t at line 62 fail #4
 ・
 ・
こんなのが40行ほど続いて、
t/apreq/cgi..........FAILED tests 1-41
Failed 41/41 tests, 0.00% okay
t/apreq/cookie.......ok
これ。つまりt/apreq2/cgi_tファイル全滅。全てのテストが失敗してる。これ以外は全てOKとなる。
このエラー見たところでline**で、コケてるのはわかるんだが、どうゆうエラーかは分からないと思った。
確かに上のスレでは内容書かなかった。すまん。

でも、当然だけどCPANやらで一通りBugReportは斜め読みしてみて、似たようなErrorの報告があったけど明確な解決になってなかったし、
patchも出てなかったから、「libapreq2」とか「libapreq2 インストール」でググってみて、上位のほうにあったいくつかの
インストール手順を紹介したサイト(Blog)の内容に、「make test 通らない」とか、「make test 飛ばす」みたいなこと書いてあったし、
Fedora6,7,8のSRPMの.specも make セクションの後に、test せずに install セクションに入ってたから、
test通らないのがデフォかなって思って、書き込みしたわけなんだが・・・。笑うところか?

まあいいわ。原因はつかんだ。
0715つづき2007/11/25(日) 19:12:31ID:???

で、ちょっと長くなるけど、specに従い
./buildconf
CC=gcc CFLAGS="-O2 -g" ./configure --with-apache2=/usr/local/apache2 --enable-perl-glue

とやるわけなんだが、最後の”--enable-perl-glue”がくせもの。
このオプションは、通常libapreq2のコンパイル、Library(libapreq2.so)とmodule(mod_libapreq2.so)に加えて、
perl-libapreq2モジュール郡のコンパイルも同時に行う。でまあ、
make
make test

と進むわけだが、この全滅する glue/perl/t/apreq/cgi_t は、三つ目(perl-module)のビルドセクション
(Lib、mod、perlとテスト郡が3ステップある。実際makeしてみたらわかる。)に含まれるテストなんだけど、
Library、moduleはなんなくPass(じつはこれも落とし穴あり)して、このperlのテストセクションに入ってから、
問題のerrorが発生する。

で、Test中の動作を追っかけていたんだが、この t/apreq/cgi テストの時は、一時的に
t/の下位dirにcgi-bin/test_cgi.plってファイルが生成されて、それが実際に走ってる(httpd上で)。
で、このファイルはt/apreq/cgiテスト中にしか生存しなくて、次のテストに移ったら消えてしまう。(その間約2秒、その隙に捕獲する)

このtest_cgi.plファイル自体が諸悪の根源。以下中身(の上位行)
use strict;
use File::Basename;
use warnings FATAL => 'all';
use blib;
use APR;
use APR::Pool;
use APR::Request::Param;
use APR::Request::Cookie;
use APR::Request::CGI;
0716つづき22007/11/25(日) 19:13:06ID:???
この use 郡で、APR関係のmoduleをロードできずに失敗していた。
特に自分の環境では、Apache2.2系(mod_perlも)を/usr/local/apache2/にインストールしてたんで、
コンソールで、perl -e ’use APR’ とかしただけで、
Can't load ・・・・ libaprutil-1.so.0がロードできません。そんなファイルはありません DynaLoader.pm line230 みたいなErrorになる。

確かlibaprな.soファイル一式は、/usr/local/apache2/lib以下に格納されていて、どうやらここはperlのLIBPATHには含まれていない。
ちなみにperlのLIBPATHは、
perl -e 'use DynaLoader; print join("\n",@di_library_path) . "\n";' で確認できるんだけど、これの結果は
/usr/lib
/lib
/usr/local/lib
となっていて、(perl-5.8.8-4.el4si.i386.rpm)、/usr/local/apache2/等は読み込んでくれない。

仕方がないので、一時的に/usr/local/apache2/lib/以下を、/usr/lib/にコピーして、コンソールで再度 perl -e 'use APR'とやってエラー無し。

しかししかし、これで問題解決にはならないんだこれが・・。

この状態で再び make test としても、やっぱりt/apreq/cgiで全コケは変わらない。
今度は、
use APR::Request::Param;
use APR::Request::Cookie;
use APR::Request::CGI;
この三つ、実は今ビルドしようとしてるlibapreq2-perlに含まれるmodule郡で、しかも内部でlibapreq2.so.3にリンクしてる。で、こいつらが、
Can't load ...APR/Request/Request.so' for module APR::Request: libapreq2.so.3: cannot open shared object file: No such file or directory
なエラーを吐いて、正常に走ってくれないってわけ。
(このlibapreq2.so.file郡は、今まさにビルドしたばっかりのファイルで、libapreq2-2.09/library/.lib/にいて、当然perlのLIBPATH下にはいない)
0717たぶん終わり2007/11/25(日) 19:13:42ID:???
激しく無理やりな解決方法としては、
make test せずに
make install してしまい、LIBPATH(/usr/lib/以下)に、いったんlibapreq2.soファイル郡を掘り込んでしまい、
(ApacheがRPMなら、ここに入るはず。でなければ、INSTDIRからここにコピー)その上でもっかい、libapreq2をmakeしたDirにcdして、
make test とすれば、みごと全てのテストに合格する。
(Cent4.5 Apache2.2を/usr/local/apache2/にinstall と、CentOS5.0 Apache2.2-rpmの両環境で確認)

でも、これじゃあなんだか手順が逆じゃない??
testでCompileコケてないの確認してからinstallじゃん、普通は・・・。

で、なんとかならないかと色々調べてみてんだが、
一時的にperl の DynaLoaderが検索するLIBPATHは、スクリプトの中からなら操作できるようなんだが、
外からやる方法が見つからない。(オプションとかスイッチとかで・・・。)

例えば、
LD_LIBRARRY_PATH=/usr/local/apache2/lib perl -e 'use DynaLoader; print join("\n",@dl_library_path) . "\n";'
とかやれば、@dl_library_pathに /usr/local/apache2/lib が追加されるんで、「お、出来たか」と思ったけど、
だめなんだよ。
0718ほんとに終わり2007/11/25(日) 19:14:17ID:???
ウチの環境(Cent4、Cent5共に)だと、$LD_LIBRARY_PATH変数が、環境変数ではなくて、SHELL変数扱いになる。
前もって、exportしといても、引き継いでくれない。
上の例みたいにワンライナーなり、直接perlを呼べば変数が生きたままになるんだけど、
対象がmakeだと、makeのなかで、何段にもbashを呼び出す(子プロセス扱い)もんで、この$LD_LIBRARY_PATHを継承してくれないようだ。
Fedoraでもこうなるみたい。(Fedora.jpにLD_LIBRARY_PATHがらみのスレにあった。)

ここらへん、自分もあんまり理解がないのと、WebProg板っぽくないので、ム板の方にちょっと出張してきたんだけど、
まだよくわからない。(コレ関係はこれから調べるつもり)

LIBPATHを制御できたら、make test する時にちょこっとコマンド足せばいけそうだけど、出来ないとなったら、
Makefileなり、TESP.PLがらみを書き換えないといけない。(ちょっとで済みそうにない。)
あるいは、/etc/ld.so.confとかあたりかな?

ぶっちゃけ一番簡単な方法は、testしないか、
本末転倒になっちゃうけど、/usr/libなりにso一式をコピー(インストール)してから、testかけるかのどっちかだね。

でも、みんな躓かなかったのか?
2.07以前は試してないからわからんけど、2.08,2.09両方とも、いきなりやって一発目でうまくいかんだろこれじゃあ。
(ってか、make test する以上、絶対コケるようにしか思えないんだが・・・)
0719nobodyさん2007/11/25(日) 20:48:10ID:???
今日吉野家行ったんだけどさ
まで読んだ
0720nobodyさん2007/11/26(月) 12:58:45ID:???
このスレってみんなが libapreq2 を試すようなスレじゃないと思うよ
0721nobodyさん2007/11/26(月) 13:24:06ID:???
さあ検証内容とpatchをbugリポートに送ってみんなを幸せにするんだ
0722nobodyさん2007/12/02(日) 08:44:17ID:1DkmgRhY
今北産業
0723nobodyさん2007/12/10(月) 11:46:51ID:???
これについてわかる方いますか?
http://pc11.2ch.net/test/read.cgi/php/1018333172/580-581

環境は、
OS:centos5
httpd-2.2.3-11.el5.centos
mod_perl-2.0.2-6.3.el5
になります。
0724nobodyさん2007/12/10(月) 20:27:41ID:????2BP(1520)
add-handler あたりかな?
07257232007/12/10(月) 21:05:41ID:???
>>724
ありがとうございます。
早速試してみたところ、無事解決しました!うおおお!

■変更前
<DirectoryMatch "/home/aaa/cgi-bin/(.*.cgi)">
  SetHandler perl-script
  PerlResponseHandler ModPerl::Registry
  PerlOptions +ParseHeaders
  Options ExecCGI +MultiViews
</DirectoryMatch>
↓
■変更後
<Directory "/home/aaa/cgi-bin/">
  AddHandler perl-script .cgi
  PerlResponseHandler ModPerl::Registry
  PerlOptions +ParseHeaders
  Options ExecCGI +MultiViews
</Directory>

■設定3で追記した通常のCGIで動作させるDirecitoryディレクティブは削除
0726nobodyさん2008/02/18(月) 21:32:41ID:aEv1JCZt
Apache2.2.8、PHP5.2.5、mod_fastcgi2.4.6使用。
100MBとかの大きなファイルをPHPにアップロードしている最中、
startDelayごとに新しいプロセスが起動されてしまう。
maxClassProcessesかmaxProcessesに到達するまで続く。
どうにかならないでしょうか?
07277262008/02/19(火) 18:33:58ID:3qklWUbG
mod_fastcgiのソース見たら納得。
WebサーバーからFastCGIサーバーへの、CGIでいうところの標準入力は
すぐ完了するという仮定でコードが書かれてて、
時間がかかる⇒FastCGiサーバーがハング という想定なのね。
ちょこっとパッチ当てるだけじゃ解決できないっぽい…?
参ったなあ
0728nobodyさん2008/02/19(火) 21:41:50ID:???
あー、俺も FastCGI 経由で応答に5秒以上かかる検索クエリ動かしたら異常終了したことがあったんだが、原因は>>727と同じか?
07297262008/02/19(火) 22:41:08ID:???
mod_fcgidはリクエストを全部いったんモジュール内でバッファリングしやがる。
おかげでhttpdが150MBメモリ使ってしまった。
メーリングリストを見ると、MaxRequestInMemディレクティブを使えとのことだが、
症状は変わらない。例え動くとしても、
http://fastcgi.coremail.cn/download.htm
>If the length of http request longer than "MaxRequestInMem", it will store in tmp file.
結局ファイルにバッファリングするだけみたいだし。

Apacheが異常終了したのか、それともFastCGIサーバーが異常終了したのか
07307262008/02/19(火) 22:41:27ID:???
最後の1行は>>728当て
07317282008/02/19(火) 23:57:15ID:???
>>730
もう1年以上前の話なんでうろ覚えだが、
Internal Server Error か似たような状態になった希ガス
0732nobodyさん2008/02/22(金) 07:02:49ID:???
mod_perlなんすけど、sudoで動かないのはなぜに?

ちゃんとApache権限で呼び出してるんだけど、CGIとして動いてる。
他のも一緒?
07337322008/02/24(日) 01:02:41ID:9eLfTMt1
うう;;
誰か教えておくれ。

あと、mod_perlって標準出力も違う?
Image::Magickで標準出力しようとして、
$image->Write('jpeg:-');
の部分でエラー。ファイル場所がおかしいって。

指定方法を変えれば標準出力できる?
0734nobodyさん2008/02/24(日) 02:11:15ID:???
とりあえずもちついて状況を説明汁
0735nobodyさん2008/02/24(日) 02:43:34ID:???
Perlのアクセラレーター
http://rintaro.dip.jp/program/apbench/index.html

このページ繋がらなくなっちゃってるなー
このスレの人のベンチがあったからたまに見てたんだが
自宅鯖だったんだろな
0736nobodyさん2008/02/24(日) 16:59:49ID:???
>>733
mod_perlだとforkするわけじゃなくevalされるからsudoの入り込む余地は無いんじゃないか。

>ファイル場所がおかしいって。
標準出力はSTDOUTで同じ。カレントディレクトリがルートになってるよ多分。
print `pwd`;とかで調べて絶対パスで指定するか始めにchdir。
0737nobodyさん2008/02/24(日) 17:06:50ID:???
回答がちょっとずれてたごめん。
STDOUTに出力してるのに「ファイル場所がおかしいって」ってエラーが出るのか
私もわからんです。
07387322008/02/24(日) 18:56:01ID:9eLfTMt1
>>734
sudo -u apache /var/www/hoge.cgi
で動かしたいんだけど、permissionエラーになるの。
当然って言えば当然なんだけど、mod_perlならパーミッション関係なく動くよね?
これはapacheが予めコンパイルしてるからだろうけど、そのコンパイル済みのperlとして呼び出したいんだけどなぁ。

つまり、cronをはじめ、外部から呼び出す時にはmod_perlで動かす事は不可能って事でよいのかな?
url叩けばmod_perlとして動くのかな?
それと他のspeedyとかでも挙動は同じなのかなって質問です。


標準出力についての質問は、
普通"-"で標準出力を指すよね?mod_perlではこれを標準出力として認識しないようなんですが。
07397322008/02/24(日) 19:12:29ID:9eLfTMt1
>>736
あ。ありがとうございます。

標準出力についてですが、そもそも標準出力ってオンメモリーみたいなものだと思ってたのですが、
俺の勘違いでしょうか?
フルパスでどこを指定すればよいのでしょうか?
07407362008/02/24(日) 19:43:44ID:???
>sudo -u apache /var/www/hoge.cgi
>で動かしたいんだけど、permissionエラーになるの。
>当然って言えば当然なんだけど、mod_perlならパーミッション関係なく動くよね?
mod_perlは独自にapache権限で実行権限があるか調べています。

>これはapacheが予めコンパイルしてるからだろうけど、そのコンパイル済みのperlとして呼び出したいんだけどなぁ。
>つまり、cronをはじめ、外部から呼び出す時にはmod_perlで動かす事は不可能って事でよいのかな?
>url叩けばmod_perlとして動くのかな?
mod_perlは初回プログラム実行時に実行状態のままapacheプロセスの中で待機します。
なのでcronやコンソールから呼び出すときには必ずapacheを通さなければいけません。

>それと他のspeedyとかでも挙動は同じなのかなって質問です。
speedycgiではお望みの動作をします。独自にプロセスを立ち上げるのでapacheには依存しません。
cronやコンソールからの実行でも高速に動作することが可能です。面倒なsocketの管理も勝手にやってくれます。

>普通"-"で標準出力を指すよね?mod_perlではこれを標準出力として認識しないようなんですが。
エラーの原因は標準出力部分ではないと推測します。
出力以前に
$Image->Read('./hoge.jpg');
等をしていませんか?
mod_perl2から標準ではカレントディレクトリの位置がスクリプトを置いたディレクトリ
にならないためno such〜エラーが発生していると思われます。
07417322008/02/24(日) 21:05:56ID:9eLfTMt1
>>740
詳しい説明ありがとうございました。
なるほど。やはりmod_perlですとcronからはURLとして叩く(Apacheを通す)しかないのですね。
speedycgiは挙動が違うというのも非常に知りたい情報でした。ありがとうございます。

標準出力についてですが、
$image->Read('フルパス');
としています。その時点ではエラーは吐いておらず、
$image->Write('フルパス');
としてファイルに書き込む場合は同じく問題ないのですが、

$image->Write('jpeg:-');
と標準出力に出力しようとした場合にエラーとなります。
07427322008/02/24(日) 21:10:29ID:9eLfTMt1
>>740
お詳しいようなのでもう一点質問して良いですか?
mod_perlだとDBとの接続も維持したままになると思いますが、それはspeedyCGIでも同じでしょうか?

なぜcronでmod_perlとして動かしたいかというと、そこにあるので。
0743nobodyさん2008/02/24(日) 21:59:41ID:???
> $image->Write('jpeg:-');
> と標準出力に出力しようとした場合にエラーとなります。
それはWrite時に初めてリード時のエラーを指摘されているだけだと思います。
$image->Read('フルパス') or die $!;
とすればRead時にエラーが発生しているのが分かるかと思います。

>mod_perlだとDBとの接続も維持したままになると思いますが、それはspeedyCGIでも同じでしょうか?
speedyCGIでもコネクションプーリングする事は可能です。
但しmod_perlのApache::DBIのようにトランスペアレントではありませんから
自分でDBハンドルを再利用するようにロジックを組む必要があります。
もしかするとspeedyCGIからでもApache::DBIが利用できるかもしれませんが試したことが無いので分かりません。
07447322008/02/24(日) 22:49:11ID:9eLfTMt1
>>743

ありがとうございます。
ご指摘の通り、Readの時点でこけます。
フルパスで指定しているのに、なぜNo suchが出るのでしょうか?
それとファイルに書き込む時は(or dieをつけなければ)そのままエラー無く処理が完了します。

試しに標準出力ではなくファイル書き込み時ではReadの時点でInappropriate ioctl for deviceというエラーになります。
なぜエラー内容が変わってくるのでしょうか?

pwdの結果は/でしたのでフルパスの指定は間違いないと思うのですが。
07457322008/02/24(日) 22:52:20ID:9eLfTMt1
ちなみに標準出力時に出るエラーとは以下のものです。

Exception 450: Output file write error --- out of disk space? `-'
07467322008/02/24(日) 23:14:44ID:9eLfTMt1
うそでした。
すいません。どちらの場合もReadの時点で以下のエラーが出ています。
Inappropriate ioctl for device

DBとのコネクションプーリングの件は私には敷居が高そうなのでmod_perlでやってみようと思います。
0747nobodyさん2008/02/24(日) 23:24:44ID:???
ヴォケの>>732に根気よくつきあってやる>>740に感動下

とりあえず>>732はこれでも読んどけ
http://www.google.co.jp/search?q=%83R%83l%83N%83V%83%87%83%93%83v%81[%83%8A%83%93%83O%93s%8Es%93%60%90%E0
07487362008/02/25(月) 00:37:18ID:???
実際試して状況を把握しました
・Readは如何なる場合でも真を返さない
・今回の件はmod_perl時に起こる問題
XSなimageMagickがレイヤー飛び越えて標準出力してるのでIOエラーが出ている模様

標準出力とメモリ展開を混同されているっぽいですがオンメモリでやりたいという事であれば
$image->Write('jpeg:-'); を
print $image->ImageToBlob;

とすれば良いと思います。

なまじっかスキルがあると自分の解釈で勝手に理解してこういう当を得ない質問になるんだよなと
生暖かく見てたがそれは俺でした/(^o^)\
07497322008/02/25(月) 01:01:47ID:r7CiXV4j
>>748
わざわざ試してまでもらって恐縮です。
ImageMagickは標準出力がmod_perlでは出来ないんですね。

ImageToBlobでやってみます。
長々と素人にお付き合いありがとうございました。m(__)m
0750nobodyさん2008/03/30(日) 17:36:33ID:???
保守
0751nobodyさん2008/04/19(土) 04:55:36ID:???
おお、2.0.4がきてるじゃないか!!?
0752nobodyさん2008/06/04(水) 04:11:40ID:???
ほっほっ
0753nobodyさん2008/06/10(火) 16:29:09ID:m3z0B2Hm
WindowsのInstantRails(Apache1.3.33)でFCGIを動かそうと
RubyForApache-1.3.1.exe をダウンロードしてきて
LoadModule fastcgi_module modules/mod_fastcgi.so
するんですが、そんなモジュールは無いとapacheがMSGを出します。
その他mod_fastcgi-2.4.6-AP22.dll等も入れてみてるのですが、
そんなモジュールは無いといわれるのですが、そもそも LoadModule
する前になにかする必要があるのでしょうか?apacheが古い?
教えてください。
0754nobodyさん2008/06/11(水) 01:21:57ID:???
AddModule?
0755nobodyさん2008/06/11(水) 11:26:09ID:???
AddModule はLoadModuleの後に設定するはずですから・・・。
0756nobodyさん2008/06/26(木) 03:55:41ID:LMAVX0ml
mod_fast_cgiのインストールに関してググると、
apache2.2のためにはパッチをあてるってあるけど
2.4.6の今もパッチは必要なの?
0757nobodyさん2008/06/29(日) 00:22:02ID:M9i4VA+K
FastCGIは、apache1.3と組み合わせるのが
一番安定するという話をネットで目にしたのですが
これは今でもそうですか?
一昔前ならともかく、1.3系はもう古いという印象があるんですが
0758nobodyさん2008/06/29(日) 00:39:11ID:???
> 一昔前ならともかく、1.3系はもう古いという印象があるんですが

あなたの基準で「古い」と何か問題?
0759nobodyさん2008/06/29(日) 00:43:03ID:M9i4VA+K
なぜ煽り気味?
目にしたブログの記事が少し古いものばかりなので
今の状況は少し変わってるのではないかと思ったのです
0760nobodyさん2008/06/29(日) 02:14:29ID:???
1.3.41のリリース日みた?
状況も解らずに「古い印象」とかなんとかヌかしてるから言われるんでしょ
0761nobodyさん2008/06/29(日) 06:14:16ID:???
>>760
757 ではないが、お前が「古い」の意味を混同してるよ。

日本語が読めればわかると思うが、>>759 で書かれてるのは、
「FastCGIは、apache1.3と組み合わせるのが一番安定するという話」
が書かれた記事が
「少し古いものばかりなので今の状況は少し変わってるのではないかと」
ってことだろ。

Apache 1.3 系が古いか否かや、メンテナンスが続いているか否かとは別次元の話。

で、
> あなたの基準で「古い」と何か問題?
を俺なりに勝手に考えると、
・今時のディストリビューションには標準で付属していないことが多いので 1.3 の導入やメンテが面倒、できればやりたくない
・今はメンテが続いているけどいつかは終わるだろう、当然ながら 2.0 系より早い時期に
ってとこじゃね?
0762nobodyさん2008/06/29(日) 09:19:02ID:???
> ・今時のディストリビューションには標準で付属していないことが多いので 1.3 の導入やメンテが面倒、できればやりたくない

debian stable 使えばいいと思うよ。今のところ全部そろってるよ。
0763nobodyさん2008/06/29(日) 19:16:17ID:???
>>762
Debian でも
・少なくとも静的なファイル配信は Apache2 の方が優れてるからできれば Apache2 に一本化したい
ってのはあると思うよ。
0764nobodyさん2008/06/29(日) 20:57:20ID:???
> Debian でも
> ・少なくとも静的なファイル配信は Apache2 の方が優れてるからできれば Apache2 に一本化したい
> ってのはあると思うよ。

何おっしゃりたいのか、さっぱりいみわかんなーい。
持論はブログで展開してくれよ。
07657632008/06/29(日) 23:45:25ID:???
>>764
一応マジレスしておくと、
仮に「FastCGI を Apache 1.3 で動かすべき」という前提が今日も変わらないとした場合、
FastCGI を使う Web サイトを運営するには
・Apache 2.x で静的なファイルを配信しつつ、動的な部分だけ Apache 1.3 に橋渡しする
・静的なファイルも動的なコンテンツも Apache 1.3 で配信する
の2択になるわけだ。

前者は明らかに面倒だわな。避けたい。
後者はまあ Apache 2.x だけで運営する場合と手間的には大差ないが
静的コンテンツの配信パフォーマンスはやや落ちる。
Apache 1.3 がいつまでメンテされ続けるかも不安がある。

しかしもし「FastCGI を Apache 1.3 で動かすべき」という前提がもう過去の話になっていて
現在は別に Apache 2.x でも全然信頼性変わらんよという状態なのであれば
静的なファイルも動的なコンテンツも Apache 2.x に一本化できるわけだ。

どちらの方向で行くかはこの「FastCGI を Apache 1.3 で動かすべき」という伝説が
現在も正しいかどうかにかかってるから、どうなの? というのが>>757の質問でしょう。
0766nobodyさん2008/06/30(月) 00:09:35ID:???
Lighttpdに乗り換えちゃおうぜ!
0767nobodyさん2008/06/30(月) 00:52:55ID:???
1.3のほうがいいってのは何が根拠なの?
まあ、2.x用のmod_fastcgiもmod_fcgiもしょーもないとは思うけど
0768nobodyさん2008/07/01(火) 01:32:06ID:???
一応俺の Debian 鯖の各種 Apache で ab -c 10 -n 100000 http://localhost/ した結果置いとく。

■apache (1.3.34)
Time taken for tests: 87.821402 seconds
(略)
Requests per second: 1138.67 [#/sec] (mean)
Time per request: 8.782 [ms] (mean)
Time per request: 0.878 [ms] (mean, across all concurrent requests)
Transfer rate: 1279.89 [Kbytes/sec] received

■apache2 (2.2.3 mpm-prefork)
Time taken for tests: 28.611753 seconds
(略)
Requests per second: 3495.07 [#/sec] (mean)
Time per request: 2.861 [ms] (mean)
Time per request: 0.286 [ms] (mean, across all concurrent requests)
Transfer rate: 1744.21 [Kbytes/sec] received

■apache2 (2.2.3 mpm-worker)
Time taken for tests: 32.149481 seconds
(略)
Requests per second: 3110.47 [#/sec] (mean)
Time per request: 3.215 [ms] (mean)
Time per request: 0.321 [ms] (mean, across all concurrent requests)
Transfer rate: 1552.25 [Kbytes/sec] received

localhost から空のコンテンツを取るベンチだから実利用環境ではこんな大きな差は出ないと思うが、参考まで。
0769nobodyさん2008/07/01(火) 01:38:53ID:???
1.3おせええええ
パフォーマンスをとるか安定度をとるかってことか
0770nobodyさん2008/07/01(火) 18:39:39ID:???
fastcgiって昔からあって、積極的な開発はされてないし、1.3の方が安定してるっていうのは何となくそういう感じはする。
0771nobodyさん2008/07/01(火) 18:41:18ID:???
オカルトスレはここですか?
0772nobodyさん2008/07/01(火) 20:25:22ID:1MihmXWA
開発時、プログラム書き換えるたびにapache再起動するのが激しく面倒くさいんだが
なんとかならない?
0773nobodyさん2008/07/01(火) 21:02:49ID:???
mod_perlの話?Apacheの設定を変えるのでも再起動しなきゃいけないんだから
しょうがないでしょ
0774nobodyさん2008/07/01(火) 22:13:25ID:???
fastcgiって、ろくにメンテナンスされてないだろ。
0775nobodyさん2008/07/02(水) 01:13:34ID:???
最終更新去年の4月だから
メンテされてないってことはないんじゃね?
枯れてるだけじゃないの
0776nobodyさん2008/07/02(水) 02:33:20ID:f6IA2zpT
〜 時間がありません!協力をお願いします!!広めてください。 〜

【緊急】 7・2(水) 毎日新聞本社前抗議活動


         ___
       /     \
      /   \ , , /\
    /    (●)  (●) \ 行動は起こさないと、何にも始まらない!
     |       (__人__)   |  数は圧力です! その場にいるだけでいい!
      \      ` ⌒ ´  ,/ 
.      /⌒〜" ̄, ̄ ̄〆⌒,ニつ 
      |  ,___゙___、rヾイソ⊃ 
     |            `l ̄


「毎日新聞本社前抗議活動」 でググってください!!!
「毎日新聞本社前抗議活動」 でググってください!!!

http://jp.youtube.com/watch?v=XnVCDtGRhFU

【緊急】 7・2(水) 毎日新聞本社前抗議活動

〜 時間がありません!協力をお願いします!!広めてください。 〜


0777nobodyさん2008/07/03(木) 14:43:11ID:???
FastCGIってapache再起動しなくても
.fcgiファイルをtouchしたら再読み込みされるらしいね!
これ常識なん?
0778nobodyさん2008/07/03(木) 21:50:04ID:???
そりゃApacheとはプロセスが別だからね。
mod_perlとか系に対するアドバンテージかもね
0779nobodyさん2008/07/04(金) 00:01:14ID:???
>>777
そりゃ mod_fastcgi の設定次第だろ。
0780nobodyさん2008/07/04(金) 00:15:26ID:???
どんな設定したらできんの?
そもそもtouchするなんていうハック的な方法じゃなくて
正式にapiを提供したらいいのにな・・・
0781nobodyさん2008/07/04(金) 01:38:38ID:???
ドキュメントくらい読めよ
http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
http://d.tir.jp/pw?mod_fastcgi
0782nobodyさん2008/07/04(金) 10:18:25ID:???
> mod_perlとか系に対するアドバンテージかもね

なるのかなー?
fastcgi つかうと、FCGI::ProcManager アプリ側と front 両方いじらないと
アプリを再起動できなくね。
メモリ共有せずにプロセスの数分メモリ使っていいなら別だけど。
0783nobodyさん2008/07/04(金) 19:04:30ID:???
mod_perlにもApache::Reloadあるし%INCからdeleteすれば
再読み込みしてくれるから更新を検知してリロードするロジックやプログラムを
自分で書くことも出来るよ。
0784nobodyさん2008/07/04(金) 20:22:20ID:???
> mod_perlにもApache::Reloadあるし

つかったことある?
■ このスレッドは過去ログ倉庫に格納されています