(请耐心等待,我保证这会到达 shebang 和 windows。)
我将最简单的 WEBRick 服务器放在一起:
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port=>2000, :DocumentRoot=>Dir::pwd)
s.start
再简单不过了。这个基本服务器确实接受 http 连接(firefox、internetexplorer、wget、TELENT)并适当地处理它们,只要我只是获取静态文档。但是,如果我将目录中的一个文件设置为具有 .cgi 扩展名,我会在服务器终端上得到 500 和以下信息:
ERROR CGIHandler: c:/rubyCGI/test.cgi:
C:/...[snip]...webrick/httpservlet/cgi_runner.rb:45: in 'exec': Exec format error - ...[snip]...
我在命令行上做了一些事情来模仿 cgi_runner.rb 第 45 行发生的事情
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 尚未获准登陆 Windows。您通常对公司偏执的头痛使我无法修改 webrick,所以我可以在 c:/rubyCGI/test.cgi 中获得操作系统(windows)识别的 shebang 表示法,这样我就不必每次都明确告诉它要使用哪个解释器采用? 我可以将所有 .cgi 文件分配为与 ruby 相关联,但从长远来看,这会受到限制。
更新:自从发布此内容后,我想到可能根本无法从 ruby 运行 cgi Web 服务器;ruby 没有分叉支持。由于无法派生进程,cgi 服务器将不得不一次执行每个 cgi 脚本,在第一个完成时忽略所有并发请求。虽然这对某些人来说可能是可以接受的,但它不适用于我的应用程序。尽管如此,我仍然对我最初的问题的答案非常感兴趣——让 shebang 在 windows 下工作。