TL;DR
您可以通过将当前工作目录作为 Web 服务器的根目录来对自己执行此操作。您实际上并没有运行文件中的代码;你只是告诉WEBrick http://www.ruby-doc.org/stdlib-2.1.1/libdoc/webrick/rdoc/WEBrick.html提供您在 URI 中指定的任何文件。http://localhost:5000/2loop.rb
将在您发布的示例中将“2loop.rb”作为 text/html 提供。
使用un.rb
您使用的标志实际上并不是“运行”。相反,-r
flag 实际上加载了一个模块,在本例中是un.rb http://ruby-doc.org/stdlib-2.1.1/libdoc/un/rdoc/un_rb.html模块。使用 un.rb 启动 WEBrick 的操作如下:
$ ruby -run -e httpd . -p 5000
并在文档根目录中启动一个 Web 服务器。在这种情况下,点表示使用当前工作目录作为根目录。这实际上并不是您想要启动放置在 Ruby 文件中的代码。
以编程方式运行 WEBrick
使用一些片段WEBrick 文档 http://www.ruby-doc.org/stdlib-2.1.1/libdoc/webrick/rdoc/WEBrick.html,您将看到可以创建一个名为“2loop.rb”的文件,其中包含以下内容:
#!/usr/bin/env ruby
require 'webrick'
root = File.path '/tmp/public_html'
server = WEBrick::HTTPServer.new :Port => 5000, :DocumentRoot => root
trap 'INT' do server.shutdown end
server.start
这将为端口 5000 上的 /tmp/public_html 目录提供文件,您可以通过以下地址访问http://localhost:5000
。然后您可以使文件可执行并启动服务器./2loop.rb
,或者只是运行ruby 2loop.rb
如果您出于某种原因不想使文件可执行。
如果您不希望 WEBrick 只提供文件服务,则必须添加自定义行为 http://ruby-doc.org/stdlib-2.1.1/libdoc/webrick/rdoc/WEBrick.html#module-WEBrick-label-Custom+Behavior到 2loop.rb 脚本内的 Web 服务器。这是一个相当低级的事情,但可能适合您的需求。
明智的选择
你可能应该使用像这样的网络框架红宝石 on Rails http://rubyonrails.org/ or Sinatra http://www.sinatrarb.com/如果您不想自己编写所有低级行为。 Sinatra 尤其是一个非常轻量级的替代方案。这个例子:
#!/usr/bin/env ruby
require 'sinatra'
set :port, 5000
get '/hello' do
"Hello, World!"
end
将创建一个 URLhttp://localhost:5000/hello
使用返回“Hello, World!”的自定义操作作为浏览器内响应。