Ruby 在rails 2.x中捕获所有路线和404

Ruby 在rails 2.x中捕获所有路线和404,ruby,ruby-on-rails-2,Ruby,Ruby On Rails 2,我有一个corscocontroller,每当我的应用程序收到OPTIONS请求时,它的工作就是响应跨域ajax头(如果允许的话)。但由于我不知道该OPTIONS请求将在何处到达,因此在路由文件的顶部设置了一个catchall路由,用于捕获任何路径的OPTIONS请求 map.cors '*path', :controller => 'cors', :action => 'index', :conditions => { :method => :options

我有一个
corscocontroller
,每当我的应用程序收到
OPTIONS
请求时,它的工作就是响应跨域ajax头(如果允许的话)。但由于我不知道该
OPTIONS
请求将在何处到达,因此在路由文件的顶部设置了一个catchall路由,用于捕获任何路径的
OPTIONS
请求

map.cors '*path',
  :controller => 'cors',
  :action => 'index',
  :conditions => { :method => :options }
对于实际的
OPTIONS
请求,这非常有效。当应用程序应该提供未找到的
404时,问题就出现了

现在,当我加载
/no/404/for/you
(我的应用程序不处理路由的路径)时会发生什么,我不再得到404。相反,这个路由get被激活,我得到了一个不允许的
405方法
。这导致我们的日志中充满了并非真正错误的错误,而监控(如New Relic)会发出关于错误率的恐慌性电子邮件,而实际上一切都很好

它似乎看到路径匹配,但
:条件不匹配,并引发异常。有趣的是,路线处理似乎是一个2次通过的过程。此cors路由位于“我的路由”文件的顶部,仅当存在
选项
请求(良好)或匹配后没有其他路由声明且该路径上没有静态文件(不良)时才会触发

问题:

我如何才能让这条“全包”路由针对所有
选项
请求命中我的控制器,而不让它通过
get
POST
PUT
DELETE
拦截和抛出关于其他不匹配路由的错误

不幸的是,我需要在Rails 2.x中这样做。

你这么说

此cors路由位于“我的路由”文件的顶部,仅当存在选项请求(良好)或匹配后没有其他路由声明且该路径没有静态文件(不良)时才会触发

您可以在
routes.rb的末尾添加一条路由,该路由将匹配所有其他路由,只需返回404即可


正如你所说,这是一种黑客,但我不认为有任何其他方式来完成你的catchall路线在顶部。也许有人会想出别的办法。

如果没有其他路由在匹配后声明
为什么不添加一个在末尾匹配所有其他路由并返回404?@oldergod-Well。。。真不敢相信我没想到。虽然看起来有点黑。但是,是的,它起作用了。把它贴出来作为答案,你就可以得到赏金了!这起作用了。它触发控制器操作一行
render:file=>“#{RAILS\u ROOT}/public/404.html”,:status=>:not_found
,这似乎只是正常的操作,不会让NewRelic崩溃。谢谢你的主意!