我怎样才能用WEBrick执行Ruby代码,而不是将代码转储到我的浏览器?

当我使用WEBrick服务器在浏览器中运行我的程序时,我遇到了一个问题。 它显示我的代码,写在2loop.rb文件中。

当我运行ruby -run -e -httpd. -p 5000 ruby -run -e -httpd. -p 5000 ,然后在浏览器中加载http://localhost:5000/2loop.rb ,它将显示来自2loop.rb的代码,而不是运行它。

我怎样才能执行2loop.rb程序?

Solutions Collecting From Web of "我怎样才能用WEBrick执行Ruby代码,而不是将代码转储到我的浏览器?"

TL; DR

通过将当前的工作目录作为Web服务器的根目录来完成这个任务。 你实际上并没有在你的文件中运行代码。 你只是告诉WEBrick服务你在URI中的任何文件。 http://localhost:5000/2loop.rb将在您的发布示例中以text / html的形式提供“2loop.rb”。

使用un.rb

你正在使用的国旗实际上并没有“运行”。 相反, -r标志实际上加载了一个模块,在这里是un.rb模块。 使用un.rb来启动WEBrick是这样做的:

 $ ruby -run -e httpd . -p 5000 

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

以编程方式运行WEBrick

使用WEBrick文档中的一些片段,您将看到可以创建一个名为“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脚本中的Web服务器。 这是一个相当低级的事情,但可能适合您的需求。

明智的选择

如果你不想自己编写所有的低级行为,你应该使用Ruby on Rails或Sinatra这样的Web框架。 Sinatra尤其是一个非常轻量级的选择。 这个例子:

 #!/usr/bin/env ruby require 'sinatra' set :port, 5000 get '/hello' do "Hello, World!" end 

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

那么,我建议你使用通用网关接口(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下工作,请在此处查看脚本(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脚本。