如何使用WEBrick执行Ruby代码而不是将代码转储到浏览器?

时间:2014-03-16 06:33:06

标签: ruby windows webrick

我在使用WEBrick server的浏览器中运行程序时遇到问题。它向我展示了我在2loop.rb文件中编写的代码。

当我在命令提示符下运行ruby -run -e -httpd. -p 5000并在浏览器中加载http://localhost:5000/2loop.rb时,它会显示来自2loop.rb的代码,而不是运行它。

如何执行2loop.rb程序?

2 个答案:

答案 0 :(得分:2)

TL; DR

您可以通过将当前工作目录作为Web服务器的根目录来自行完成此操作。您实际上并未在文件中运行代码;您只是告诉WEBrick提供您在URI中命名的任何文件。 http://localhost:5000/2loop.rb将提供" 2loop.rb"在您发布的示例中作为text / html。

使用un.rb

您正在使用的旗帜实际上并未运行。"相反,-r标志实际上加载了一个模块,在本例中是un.rb模块。使用un.rb启动WEBrick是这样的:

$ ruby -run -e httpd . -p 5000

并在文档根目录中启动Web服务器。在这种情况下,点表示使用当前工作目录作为根。这并不是你想要开始放在Ruby文件中的代码。

以编程方式运行WEBrick

使用WEBrick documentation中的一些代码段,您将看到可以创建名为" 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只提供文件,您必须{2}到2loop.rb脚本内的Web服务器。这是一个相当低级的事情,但可能适合您的需求。

明智的选择

如果您不想自己编写所有低级别行为,则应该使用add custom behaviorRuby on Rails等网络框架。 Sinatra尤其是一种非常轻量级的替代品。这个例子:

#!/usr/bin/env ruby

require 'sinatra'
set :port, 5000
get '/hello' do
  "Hello, World!"
end

将在http://localhost:5000/hello创建一个网址,其中的自定义操作会返回" Hello,World!"作为浏览器内的回应。

答案 1 :(得分:1)

好吧,我建议你使用Common Gateway Interface (CGI)。让我举个例子。

首先,创建一个名为server.rb的文件:

require 'webrick'
server = WEBrick::HTTPServer.new(
  :Port => 6789, # a server's port
  :DocumentRoot => File.join(Dir.pwd, "/scripts") # a folder with scripts
)
server.start

其次,创建一个文件夹scripts并将以下文件(the_best_program.cgi)放入其中。请注意.cgi扩展名。这很重要。如果您在Windows下工作,请查看here以获取有关脚本第一行(shebang)的详细信息。

#!/usr/bin/env ruby 
require 'cgi'
print "Content-type: text/plain\n\n" 
5.times { |i| puts "Hello world #{i}!"}
puts 'So many worlds there. :('

<强>最后

  • 从命令行(ruby server.rb)启动服务器。
  • 启动浏览器并转到localhost:6789/the_best_program.cgi(或0.0.0.0:6789/the_best_program.cgi
  • 享受!

备注

  • 您可能需要更改脚本文件夹/脚本的权限。在类似unix的系统上执行:chmod 755 scripts scripts/the_best_program.cgi
  • 您不仅可以通过这种方式启动ruby脚本。