2009-11-24 5 views
0

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) 

Répondre

0

Je ne comprends pas très bien pourquoi Rack est nécessaire. Si vous avez écrit le script en utilisant le module CGI intégré de Ruby, vous devriez pouvoir dire à thin de traiter le répertoire comme cgi-bin, tout comme le Apache ScriptAlias directive, et Ruby CGI s'occupera du reste. Si mince ne peut pas faire cela, peut-être lighttpd serait une meilleure solution.

Questions connexes