gpt4 book ai didi

ruby - 在 Mongrel 处理程序的 URI 中使用正则表达式

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:08 25 4
gpt4 key购买 nike

我目前正在使用 Mongrel 开发自定义 Web 应用程序项目。

我希望 Mongrel 使用基于正则表达式的已定义 Http 处理程序。例如,每当有人调用类似 http://test/bla1.js 的 url 时或 http://test/bla2.js调用相同的 Http 处理程序来管理请求。

到目前为止,我的代码看起来是这样的:

http_server = Mongrel::Configurator.new :host => config.get("http_host") do
listener :port => config.get("http_port") do

uri Regexp.escape("/[a-z0-9]+.js"), :handler => BLAH::CustomHandler.new
uri '/ui/public', :handler => Mongrel::DirHandler.new("#{$d}/public/")
uri '/favicon', :handler => Mongrel::Error404Handler.new('')

trap("INT") { stop }
run
end
end

如您所见,我在这里尝试使用正则表达式而不是字符串:

 uri Regexp.escape("/[a-z0-9]+.js"), :handler => BLAH::CustomHandler.new

但这行不通。有什么解决办法吗?

谢谢。

最佳答案

您应该考虑创建一个 Rack application反而。机架是:

  • Ruby 网络应用程序标准
  • 由所有流行的 Ruby 网络框架内部使用(RailsMerbSinatraCampingRamaze、...)
  • 更容易扩展
  • 准备好在任何应用程序服务器(Mongrel、Webrick、Thin、Passenger 等)上运行

Rack 有一个 URL 映射 DSL,Rack::Builder ,它允许您将不同的 Rack 应用程序映射到特定的 URL 前缀。您通常将其保存为 config.ru,然后使用 rackup 运行它。

不幸的是,它也不允许使用正则表达式。但是由于 Rack 的简单性,编写一个“应用程序”(实际上是一个 lambda)真的很容易,如果 URL 与某个正则表达式匹配,它将调用正确的应用程序。

根据您的示例,您的 config.ru 可能如下所示:

require "my_custom_rack_app" # Whatever provides your MyCustomRackApp.

js_handler = MyCustomRackApp.new

default_handlers = Rack::Builder.new do
map "/public" do
run Rack::Directory.new("my_dir/public")
end

# Uncomment this to replace Rack::Builder's 404 handler with your own:
# map "/" do
# run lambda { |env|
# [404, {"Content-Type" => "text/plain"}, ["My 404 response"]]
# }
# end
end

run lambda { |env|
if env["PATH_INFO"] =~ %r{/[a-z0-9]+\.js}
js_handler.call(env)
else
default_handlers.call(env)
end
}

接下来,在命令行上运行您的 Rack 应用程序:

% rackup

如果您安装了 mongrel,它将在端口 9292 上启动。完成!

关于ruby - 在 Mongrel 处理程序的 URI 中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com