我编写了一些ruby CGI脚本(使用Ruby CGI类),我使用lighttpd从我的生产服务器提供。我想使用thin在我的开发服务器上测试它们。基本上,我想将所有CGI脚本放在一个目录中,并在该目录中开始精简。然后,对http://localhost:3000/<script&gt;的任何请求应该只执行&lt; script&gt;在当前目录中并返回结果。如果瘦有内置的方法,我找不到它。如果你知道你在做什么,我会想象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)
答案 0 :(得分:0)
我有点不清楚为什么Rack是必要的。如果您使用Ruby的内置CGI模块编写脚本,您应该能够告诉thin将目录视为cgi-bin
,就像Apache ScriptAlias directive一样,Ruby CGI将负责处理休息。如果瘦无法做到这一点,那么lighttpd可能是更好的解决方案。