在你的情况下,我将使用 rack,这是一个 ruby:
- Rack 包括将 Rack 连接到所有这些 Web 应用程序服务器(WEBrick、Mongrel 等)的处理程序。
- Rack 包括将 Rack 连接到各种 Web 框架(Sinatra、Rails 等)的适配器。
- 在服务器和框架之间,可以使用中间件根据您的应用程序需求定制 Rack。
要使用 rack,您必须创建 rack 应用程序:
- 必须接电话方式。
- 调用方法由服务器调用,并且必须接收带有 CGI 信息的环境变量。
- 必须返回一个包含 3 个元素的数组:
a) 状态:整数
b)标题:哈希
c) body:响应每个调用的对象,每个调用都返回一个字符串。
Rack 中间件背后的基本思想是——位于调用客户端和服务器之间,在将 HTTP 请求发送到服务器之前处理它,在将 HTTP 响应返回给客户端之前处理它。
这是您问题的基本答案:
test_rack.rb
class MyApp
def call env
[200, {"Content-Type" => "text/html"}, ["Hello Rack Participants"]]
end
end
config.ru
require './test_rack.rb'
run MyApp.new
然后启动应用程序,并调用 localhost:9292/anything
╭─toni@Antonios-MBP ~/learn/ruby/stackoverflow/scripting ‹ruby-2.2.3@stackoverflow› ‹1.7› ‹SBCL 1.3.5›
╰─$ rackup config.ru
[2016-05-08 11:17:41] INFO WEBrick 1.3.1
[2016-05-08 11:17:41] INFO ruby 2.2.3 (2015-08-18) [x86_64-darwin15]
[2016-05-08 11:17:41] INFO WEBrick::HTTPServer#start: pid=2610 port=9292
::1 - - [08/May/2016:11:18:04 +0200] "GET /patata HTTP/1.1" 200 - 0.0010
::1 - - [08/May/2016:11:18:04 +0200] "GET /favicon.ico HTTP/1.1" 200 - 0.0005
::1 - - [08/May/2016:11:18:09 +0200] "GET /patata/calimero HTTP/1.1" 200 - 0.0003
让我们看看 rack 在控制台中的工作,查看多个网络服务器并传递 lambda 以创建调用函数
require 'rack'
=> true
irb(main):010:0> Rack::Handler::constants
=> [:CGI, :FastCGI, :Mongrel, :EventedMongrel, :SwiftipliedMongrel, :WEBrick, :LSWS, :SCGI, :Thin]
irb(main):026:0> Rack::Handler::WEBrick.run lambda { |env| [200,{"Content-Type" => "text/plain"}, ["Hello. The time is #{Time.now}"]] }
[2016-05-08 11:22:39] INFO WEBrick 1.3.1
[2016-05-08 11:22:39] INFO ruby 2.2.3 (2015-08-18) [x86_64-darwin15]
[2016-05-08 11:22:39] INFO WEBrick::HTTPServer#start: pid=1798 port=8080
走得更远:
https://blog.engineyard.com/2015/understanding-rack-apps-and-middleware
https://github.com/rack/rack