redmine試し…で、CGIが動かなかった

No Comments

ちょっと試しで、redmineを動かしてみることにした。
いろいろとgem関連をインストールするのは面倒だったので、全部まとまっているパッケージを落としてきて試したのだけど…エラーで動かない

/home/redmine/vendor/rails/actionpack/lib/action_controller/cgi_process.rb:22:in `__send__’: undefined method `env_table’ for nil:NilClass (NoMethodError)

cgi_process.rbでenv_tableメソッド呼び出しが落ちているとのエラー。まぁそもそもsenderオブジェクトがnilなら呼び出せるわけもないんですが。
でもなぜ?

ざっとネットで調べると、「CGI版は動かないよ」との様子。
スタックトレースを元にソースを眺めると「DEPRECATE: Remove CGI support」の文字が…ええと、DEPRECATEの意味は「非難」「反対」…困るのでがんばって反対してください。よろしくお願いします。

ともかく、このままじゃ動かない。Passengerやfcgiを導入することは今回のテストでは意味が無いので困った。
仕方が無いので無理矢理対応すること考えた。

FastCGI版なら動く。ではダミーのfcgi.rbでCGI動作をラッピングすればいいと(笑)

で、ダミーfcgi.rbのソース。
FastCGIではないので、Recordとかいろいろ考えなくていいのでシンプル。

#ダミーfcgi
class FCGI
    def self::each(&block)
        req = Request.new
        yield req
    end

    def self::each_request(&block)
        each(&block)
    end

    class Request
      def initialize()
        @env = Hash.new
        ENV.each {|k, v| @env[k]=v}

        @in = STDIN
        @out = STDOUT
        @err = STDERR
        @data = StringIO.new
      end

      attr_reader :env
      attr_reader :in
      attr_reader :o ut
      attr_reader :err
      attr_reader :data

      def finish
      end
    end
end

これをLOAD_PATHの通っているところにおいて、dispatch.fcgiを呼び出せば動いた。 railsが必要とするだけのメソッドしか入っていないのでどこでも使えるとは限らないけどね。

Leave a Reply

*