4

私が管理しているサイトは、サイトの古いバージョンから、存在しなくなった javascript ファイルに対する絶え間ない要求を受けています。これらのリクエストは、404 を返すために毎回 Rails 経由でルーティングされるため、多くのリソースを消費します。私は、Rack がその特定の URL を処理し、404 自体を返すようにする方がはるかに良いと考えています。あれは正しいですか?もしそうなら、どのように設定しますか?

私はこのブログ投稿をチェックしてきましたが、これは前進するためのちょっとした方法だと思います (つまり、既存の Rack モジュールからの継承):

http://icelab.com.au/articles/wrapping-rack-middleware-to-exclude-certain-urls-for-rails-streaming-responses/

4

2 に答える 2

4

それで、私は自分の小さなミドルウェアを書くことになりました:

module Rack

  class NotFoundUrls

    def initialize(app, exclude)
      @app = app
      @exclude = exclude
    end

    def call(env)

      status, headers, response = @app.call(env)

      req = Rack::Request.new(env)
      return [status, headers, response] if !@exclude.include?(URI.unescape(req.fullpath))

      content = 'Not Found'
      [404, {'Content-Type' => 'text/html', 'Content-Length' => content.size.to_s}, [content]]

    end

  end

end

次に、これを config.ru ファイルに追加します。

use Rack::NotFoundUrls, ['/javascripts/some.old.file.js']

初めて作ったので間違いなどありましたら教えて...

于 2013-10-25T19:04:31.310 に答える