I ve written some ruby CGI scripts (using the Ruby CGI class) that I serve from my production server using lighttpd. I want to test them on my development server using thin. Basically, I want to drop all my CGI scripts in a directory and start thin in that directory. Then, any requests to http://localhost:3000/<script> should just execute <script> in the current directory and return the results. If thin has a built-in way of doing this, I can t find it. I would imagine the Rack config file for this is easy if you know what you re doing, but I don t.
Update:
This rackup file seems to work. I m not sure if it s the best solution, but it should be fine for a development environment.
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("
", idx)
line = response[idx..line_end].strip
idx = line_end+1
if status < 0
if line =~ /(ddd)/
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)