J'ai écrit des scripts CGI ruby (en utilisant la classe Ruby CGI) que je diffuse depuis mon serveur de production en utilisant lighttpd. Je veux les tester sur mon serveur de développement en utilisant thin. Fondamentalement, je veux laisser tomber tous mes manuscrits de CGI dans un répertoire et commencer mince dans ce répertoire. Ensuite, toutes les demandes à http://localhost:3000/<script> devraient simplement exécuter le script <> dans le répertoire courant et retourner les résultats. Si mince a un moyen intégré de le faire, je ne peux pas le trouver. J'imagine que le fichier de configuration de Rack pour cela est facile si vous savez ce que vous faites, mais je ne le fais pas.Comment utiliser ruby thin avec des scripts CGI?
Mise à jour:
Ce fichier rackup semble fonctionner. Je ne suis pas sûr que ce soit la meilleure solution, mais cela devrait convenir à un environnement de développement.
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)