0

lighttpd を使用して実稼働サーバーから提供するいくつかの Ruby CGI スクリプト (Ruby CGI クラスを使用) を作成しました。シンを使用して開発サーバーでそれらをテストしたい。基本的に、すべての CGI スクリプトをディレクトリにドロップし、そのディレクトリでシンを開始したいと考えています。次に、http://localhost:3000/<script > へのすべてのリクエストは、現在のディレクトリで <script> を実行し、結果を返す必要があります。シンにこれを行う方法が組み込まれている場合、私はそれを見つけることができません。自分が何をしているのかわかっていれば、このための Rack 構成ファイルは簡単だと思いますが、私にはわかりません。

アップデート:

このラックアップファイルは機能しているようです。それが最善の解決策かどうかはわかりませんが、開発環境では問題ないはずです。

run(lambda do |env|
  require 'rubygems'
  require 'systemu'
  script = env['REQUEST_PATH'][1..-1] + '.rb'
  response = '' 
  err = ''
  systemu(['ruby', script], 'stdout' => response, 'stderr' => err, 'env' => { 
    'foo' => 'bar' })
  if err.length > 0 
    [ 500, {'Content-Type' => 'text/plain'}, err ]
  else
    idx = 0
    status = -1
    headers = {}
    while true
      line_end = response.index("\n", idx)
      line = response[idx..line_end].strip
      idx = line_end+1

      if status < 0
        if line =~ /(\d\d\d)/
          status = $1.to_i
        else
          raise "Invalid status line: #{line}"
        end
      elsif line.empty?
        break
      else
        name, value = line.split /: ?/
        headers[name] = value
      end
    end
    content = response[idx..-1]
    [status, headers, content]
  end
end)
4

1 に答える 1

0

なぜ Rack が必要なのか、ちょっとよくわかりません。Ruby の組み込み CGI モジュールを使用してスクリプトを作成した場合、thin にディレクトリを として扱うcgi-binように指示するだけで、Apache ScriptAlias ディレクティブと同様に、あとは Ruby CGI が処理します。thin でこれができない場合は、おそらく lighttpd がより良い解決策になるでしょう。

于 2011-02-01T18:48:41.367 に答える