(Потерпи меня, я обещаю, что доберется до Шебанга и окон.)
У меня есть простейший из серверов WEBRick:
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port=>2000, :DocumentRoot=>Dir::pwd)
s.start
Не может быть проще. Этот базовый сервер принимает http-соединения (firefox, internet exploder, wget, TELENT) и обрабатывает их соответствующим образом, пока я просто загружаю статические документы. Однако, если я установил один из файлов в каталоге с расширением .cgi, я получу обратно 500 и следующее на терминале сервера:
ERROR CGIHandler: c:/rubyCGI/test.cgi:
C:/...[snip]...webrick/httpservlet/cgi_runner.rb:45: in 'exec': Exec format error - ...[snip]...
Я сделал несколько вещей в командной строке, чтобы имитировать то, что происходит в строке 45 cgi_runner.rb
c:\>ruby
exec "c:/rubyCGI/test.cgi"
^Z
(same error erupts)
c:\>ruby
exec "ruby c:/rubyCGI/test.cgi"
^Z
Content-type: text/html
Mares eat oats and does eat oats and I'll be home for Christmas.
Очевидно, что WEBrick не был очищен для посадки на окна. Ваши обычные головные боли корпоративной паранойи мешают мне изменить webrick, поэтому могу ли я получить обозначение шебанга в c: /rubyCGI/test.cgi, распознаваемое ОС (windows), поэтому мне не нужно явно говорить это каждый раз какой интерпретатор использовать? Я мог бы назначить все файлы .cgi, которые будут связаны с ruby, но это будет ограничивать в долгосрочной перспективе.
UPDATE:
После публикации этого сообщения мне пришло в голову, что, возможно, вообще невозможно будет запустить веб-сервер cgi из ruby; Рубин не имеет поддержки разветвления. Без возможности ветвления процесса сервер cgi должен был бы выполнять каждый скрипт cgi по одному, игнорируя все одновременные запросы, пока первый завершен. Хотя это может быть приемлемо для некоторых, это не будет работать для моего приложения. Тем не менее, я все еще был бы очень заинтересован в ответе на мой первоначальный вопрос - о том, как заставить Шебанга работать под окнами.