NULL::something

Login via flickr, はてな, TypeKey.

2006-02-20

FCGI, Ruby, 変更なしで

エラー画面

以前CGI FastCGI, rubyとかいうセクションを書いたけど、ENV って普通に書き換えられることに気付いたのでもう一度やってみた。できたっぽい?

#!/usr/bin/ruby
require "fcgi"
FCGI.each do |fcgi|
    $stdout = fcgi.out
    $stdin = fcgi.in

    ENV.replace(fcgi.env)

    load(fcgi.env["SCRIPT_FILENAME"], true)
    fcgi.finish
end
fastcgi.server             = (
                               ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "/tmp/fcgi-php.socket",
                                   "bin-path" => "/usr/bin/php-cgi"
                                 )
                               ),
                               ".rb" =>
                               ( "localhost-rb" =>
                                 (
                                   "socket" => "/tmp/fcgi-ruby.socket",
                                   "bin-path" => "/home/cho45/bin/ruby-fcgi.rb"
                                 )
                               )
                             )  

ruby-fcgi.rb の位置がキモイけれど、これは共有ディレクトリを /home/cho45 以下しか設定してなくてめんどくさかったから。symlink 貼ればいいんだけど……

でもって以下のようなスクリプトでテスト

require "cgi"
puts "Content-type: text/plain\n\n"
@cgi = CGI.new
p @cgi
p @cgi.accept

全く普通の CGI と同じ形式。パッと見上手くいってる。POST のときどうなるか微妙だけどあとで追試。

ちなみに、これだとエラー出力がコンソールにでるけど、その辺は適当にログ残すようにすればいいかな。というか、load してるところの例外キャッチして美しいエラー画面を出すようにすればよろしそう。どうせログなんぞ見ない。

当たり前だけど、FastCGI 前提でプログラム書くならもっと最適化ができるので (リクエストごとに変わらない部分は共通にできる)、普通の CGI でもどっちでも使いたいという場合以外は積極的に使うようなもんじゃない。

ruby-fcgi.rb, エラーをスタックトレース付きで表示するようにした。

Inserted at 2006-02-20T06:20:27+09:00

ENV.replace があった……

Inserted at 2006-02-20T06:35:21+09:00

Dir.chdir するように修正。

hiki が一応動くっぽい。と、思いきや、リロードごとに 500 になったり 200 になったりする。なぞい。

Inserted at 2006-02-20T13:46:22+09:00

$SAFE を設定されていたみたいだ。(リクエスト -> hiki でセーフレベルが設定される -> リクエスト -> セーフレベルがあがっているのでエラー終了 -> 見れない -> リクエスト -> fcgi プロセスが再起動される -> 見れるように) Thread 使って分離した。callcc 使うべきだなぁ。

Inserted at 2006-02-20T13:49:46+09:00

Comments (0)

Trackback URI: http://lowreal.net/logs/2006/02/20/4.trackback

NULL

RSS feed meter for http://lowreal.net/logs/latest

Alternates

  1. RSS 1.0
  2. Atom 1.0

Generated with Taglibro

この日記は Taglibro と呼ばれる XML ベースの XSLT をテンプレートとして使ったシステムを使っています。現在の Taglibro は Ruby, ruby-xslt, libxml-ruby による実装です。ソースコードはとりあえず公開していません。