【问题标题】:How can I execute Ruby code with WEBrick instead of dumping the code to my browser?如何使用 WEBrick 执行 Ruby 代码,而不是将代码转储到我的浏览器?
【发布时间】:2014-03-16 06:33:06
【问题描述】:

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

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

如何改为执行 2loop.rb 程序?

【问题讨论】:

  • 您应该查看sinatra 之类的内容。

标签: ruby windows webrick


【解决方案1】:

TL;DR

通过将当前工作目录作为 Web 服务器的根目录,您可以做到这一点。您实际上并没有运行文件中的代码;您只是告诉WEBrick 提供您在URI 中命名的任何文件。 http://localhost:5000/2loop.rb 将在您发布的示例中将“2loop.rb”作为文本/html 提供。

使用 un.rb

您使用的标志实际上并不是“运行”。相反,-r 标志实际上加载了一个模块,在本例中为 un.rb 模块。使用 un.rb 启动 WEBrick 是这样完成的:

$ ruby -run -e httpd . -p 5000

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

以编程方式运行 WEBrick

使用WEBrick documentation 中的一些sn-ps,您将看到您可以创建一个名为“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 只提供文件,则必须在 2loop.rb 脚本中将 add custom behavior 发送到您的 Web 服务器。这是一个相当低级的事情,但可能适合您的需求。

明智的选择

如果您不想自己编写所有低级行为,您可能应该使用像 Ruby on RailsSinatra 这样的 Web 框架。 Sinatra 尤其是一个非常轻量级的替代品。这个例子:

#!/usr/bin/env ruby

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

将在http://localhost:5000/hello 创建一个带有返回“Hello, World!”的自定义操作的 URL作为浏览器内的响应。

【讨论】:

  • 嗨,这不起作用我已经在命令提示符“ruby -run -e httpd .-p 5000”中运行了这个命令 ----- 在用我的文件打开浏览器之后..我写下这段代码 -------------- require 'webrick' root = File.path '/tmp/public_html' server = WEBrick::HTTPServer.new :Port => 5000, :DocumentRoot => root trap 'INT' do server.shutdown end server.start ary = { "0"=>"fred", "1"=>​​10, "2"=>3.14, "3"=>"这是一个string", "4"=>"last element", } ary.each 做 |key, value| puts "#{key} #{value}" end 它向我展示了它的原样:(
【解决方案2】:

好吧,我建议你使用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​​ 脚本。

【讨论】:

    猜你喜欢
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2017-05-30
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多