なひです. > From: Shugo Maeda [mailto:shugo / netlab.co.jp] > Sent: Monday, July 05, 1999 9:47 AM > At Sat, 3 Jul 1999 21:29:49 +0900, > NAKAMURA, Hiroshi <nakahiro / sarion.co.jp> wrote: > > > なひです.mod_rubyと格闘中です. > > > うーん,mod_rubyのdebugって,どうやりゃいいんだろう.^^; > > 私は、gdbでrun -Xしてます(^_^; やはりそれしかありませんか.ありませんよね.^^; というわけで諦めて(?), ApacheのStartServersとMaxClientsを1にしてgdbすることにしました. > > Apache/1.3.3 (Unix) mod_ruby/0.1.0 Ruby/1.3.1(1999-03-11) > > > > を使ってるんですが,ある程度の長さの文字列をPOSTすると, > > mod_ruby経由で動いているスクリプトのお返事がなくなるようです. > > ひょっとすると、ついこの間つぶしたバグかもしれません。 > このパッチでいかがでしょう? > # 0.1.2へのパッチです。 素早い対応,どうもありがとうございます. 実はこれまでいじっていた Apache/1.3.3 (Unix) mod_ruby/0.1.0 Ruby/1.3.1(1999-03-11) というのは,jin.gr.jpというサイトで実験的に起ち上げてもらっている Linuxサーバ環境なのでした. 勝手にPatch当てていろいろいじれる環境ではないんですが, いいついでですから,現在ローカルに Apache/1.3.6 + mod_ruby/0.1.2 + Ruby/1.3.4 on Solaris/2.5.1 を構築中です. / / / まずはインストールに使うMakefile.RBのPatchです. Solaris/2.5.1だとmkmf内のCONFIG["INSTALL_DATA"]が "../install-sh"になってしまうので,CONFIG["conpile_dir"]を足しました. ついでにHP-UX対策に(?),INSTALL_DLLIBを使うようにしました. ただ,ApacheをHP-UXでインストールしてないのでよくわかりません. HP-UX上で「〜.so」決め打ちじゃ,元々駄目かな? INSTALL_DLLIBは,ruby-1.3.4からでしたっけ? # というのは,後ろに居る小松さんに聞いた方が早いかも... # ...1.3.4-990624からだそうです.^^; / / / 22a23,31 > $install = CONFIG["INSTALL_PROGRAM"] > $install_dllib = CONFIG["INSTALL_DLLIB"] > $install_data = CONFIG["INSTALL_DATA"] > if $install =~ %r!^[^\s/]+/! then > $install = CONFIG["compile_dir"]+"/"+$install > $install_dllib = CONFIG["compile_dir"]+"/"+$install_dllib > $install_data = CONFIG["compile_dir"]+"/"+$install_data > end > 34,35c43,45 < INSTALL = #{CONFIG["INSTALL"]} < INSTALL_DATA = #{CONFIG["INSTALL_DATA"]} --- > INSTALL = #{$install} > INSTALL_DLLIB = #{$install_dllib} > INSTALL_DATA = #{$install_data} 48c58 < $(INSTALL_DATA) $(TARGET) #{$APACHE_LIBEXECDIR} --- > $(INSTALL_DLLIB) $(TARGET) #{$APACHE_LIBEXECDIR} / / / で,このままmod_ruby.soをインストールし, httpd.confを書き換えてApache/1.3.6を起ち上げようとすると, libmathがリンクされてないので怒られます. というわけで,Makefile.RBが作ったMakefileに「-lm」を追加. # Apacheがdlopen()に失敗した時に表示される # dlerror()を見ても,なかなか理由がわからなかった... # 「〜: symbol log: 〜」の「log」を見落としたです.^^; ここまででどうやら, Apache/1.3.6 (Unix) mod_ruby/0.1.2 Ruby/1.3.4(1999-06-25) として動かせました.(^-^) / / / ただし,どうもあるスクリプトを最初に呼び出す時, GET MethodでなくPOST Methodで呼び出すと, サーバが固まってしまうようです.gdbのスタックトレースを載せます. #0 0xef5b788c in _poll () #1 0xef5d3cc8 in select () #2 0xef1709cc in rb_thread_schedule () #3 0xef170c64 in rb_thread_wait_fd () #4 0xef17a794 in rb_io_gets () #5 0xef17a368 in rb_io_gets_internal () #6 0xef17a910 in rb_io_gets_method () #7 0xef16aa44 in call_cfunc () #8 0xef16b068 in rb_call0 () #9 0xef16b920 in rb_call () #10 0xef166824 in rb_eval () #11 0xef1655ac in rb_eval () #12 0xef165104 in rb_eval () #13 0xef163510 in eval_node () #14 0xef16cdc4 in rb_load () #15 0xef16d074 in rb_load_protect () #16 0xef1561e4 in load_ruby_script () #17 0xef1718fc in rb_thread_create_0 () #18 0xef171a60 in rb_thread_create () #19 0xef1565f8 in ruby_handler0 () #20 0xef156680 in ruby_handler () #21 0x1f61c in ap_invoke_handler () #22 0x3aae4 in process_request_internal () #23 0x3ab64 in ap_process_request () #24 0x2efe4 in child_main () #25 0x2f338 in make_child () #26 0x2f448 in startup_children () #27 0x2fd1c in standalone_main () #28 0x3088c in main () GET Methodにも関わらず, rb_io_gets_methodでSTDINを読みに行っているようです. 最初の呼び出しが(運良く)POST Methodなら, 以後GETだろうがPOSTだろうが問題なく処理しつづけます. / / / とりあえずここまでで力尽きました. POST Methodで大量に送り付けると固まる現象については, まだテストできてません.^^; って,あれ,もしかすると,頂いたPatchを当てると 上記の現象も直るのかな? 今から試してみますね...