下一个中间件会导致Rails应用无法加载资产
class Wtf
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
# next line is causing all troubles
Rails.application.routes.recognize_path request.path
@app.call(env)
end
end
如果我用
替换问题行Rails.application.routes.recognize_path '/'
然后一切都再次起作用。
如何将request.path
作为recognize_path
的参数发送,导致应用无法加载资源?
答案 0 :(得分:1)
Rails资产管道在您在请求中可以看到的散列路径下编译资产,这些资源的处理方式与其他路由不同,因此recognize_path
无法正常运行。如果您不需要使用中间件来处理资产,则应跳过这些路径。
unless request.path =~ %r(^/assets/)
Rails.application.routes.recognize_path request.path
end
或者,
begin
Rails.application.routes.recognize_path request.path
rescue ActionController::RoutingError
# pass
end