拦截WEBrick请求

时间:2015-01-26 19:06:27

标签: ruby http rake webrick

我有一个在不同硬件上运行的网络应用程序,大部分都是智能电视和机顶盒。

我的网络应用程序包含一个ruby脚本,用于设置应用程序以进行本地调试。此脚本构建我的应用程序,侦听文件更改,并使用简单的WEBrick服务器托管应用程序。

现在我遇到了某个特定硬件上的问题。在加载Web应用程序之前,此硬件希望从POST请求到与Web应用程序在同一主机上运行的health_check API获得成功响应。

我只是希望拦截这个请求并欺骗它,以便硬件加载我的客户端。到目前为止,我已经达到了这个目的:

def start_server
    require 'webrick'

    root = File.expand_path 'public'
    request_callback = Proc.new { |req, res| 
        if req.path =~ /health_check/
            # return 200 response somehow?
        end
    }
    server = WEBrick::HTTPServer.new :Port => 5000, :DocumentRoot => root, :RequestCallback => request_callback
    server.start
end

我可以修改响应对象以将状态设置为200,但它仍然会返回404.

1 个答案:

答案 0 :(得分:2)

您无需“拦截”所有请求并检查特定路径。您只需要mount_proc来处理带有proc的特定路径。

server.start之前添加以下内容:

server.mount_proc '/health_check' do |req, res|
  res.body = 'what what' # your content here
end

您可能希望将其包装在一个检查中,以确定您是否在任何需要此行为的自定义硬件上运行。

请参阅WEBrick文档中的Custom Behavior