ProxyにもなるRailsアプリ

このあいだWEBrick::HTTPProxyServerを使ってみてすごく簡単にProxyが書けることに感激したんですが、ふと「Proxyにしつつ自身へのリクエストはRailsで処理できないか」と思いました。
で、某WEBrickハッカーに聞いてみたところ、「できるよ。てかProxyってそもそも(ry」とのことでしたのでちょっと試してみましたら動いてこりゃすごい。

rails-1.2.3/lib/webrick_server.rbとrails-1.2.3/lib/commands/servers/webrick.rbを見ながら適当にスクリプトを作ったら動きました。

Proxyの側から直でRailsのモデルを使いまくれるかはまだ未確認ですが(でもできるよね、常識的に考えて)、これをベースにいろいろいじってみたいと思います。
以下実際に動作する起動スクリプトです。script/proxy_rails_serverとかに保存して実行すると、HTTPProxy兼Railsアプリなサーバが起動します。まだコピペの嵐 & 何もできない子ですがスパイクの役目は果たしたっぽい

require 'webrick/httpproxy'
require File.expand_path("../config/environment", File.dirname(__FILE__))
require 'webrick_server'

OPTIONS = {
  :port            => 3001,
  :ip              => "0.0.0.0",
  :environment     => (ENV['RAILS_ENV'] || "development").dup,
  :server_root     => File.expand_path(RAILS_ROOT + "/public/"),
  :server_type     => WEBrick::SimpleServer,
  :charset         => "UTF-8",
  :mime_types      => WEBrick::HTTPUtils::DefaultMimeTypes
}

OPTIONS['working_directory'] = File.expand_path(RAILS_ROOT)

#DispatchServlet.dispatch(OPTIONS)

options = OPTIONS
Socket.do_not_reverse_lookup = true # patch for OS X

params = { :Port        => options[:port].to_i,
           :ServerType  => options[:server_type],
           :BindAddress => options[:ip] }
params[:MimeTypes] = options[:mime_types] if options[:mime_types]

server = WEBrick::HTTPProxyServer.new(params)
server.mount('/', DispatchServlet, options)

trap("INT") { server.shutdown }

server.start