This endpoint serves static files from disk using Rack::File.

URL paths are matched with static files according to expected conventions: path, path.html, path/index.html.

Precompressed versions of these files are checked first. Brotli (.br) and gzip (.gz) files are supported. If path.br exists, this endpoint returns that file with a Content-Encoding: br header.

If no matching file is found, this endpoint responds 404 Not Found.

Pass the root directory to search for matching files, an optional index: "index" to change the default path/index.html, and optional additional response headers.

Methods

Constants

PRECOMPRESSED = { "br" => ".br", "gzip" => ".gz", "identity" => nil }
 

Accept-Encoding value -> file extension

Class Public methods

new(root, index: "index", headers: {}, precompressed: %i[ br gzip ], compressible_content_types: /\A(?:text\/|application\/javascript)/)

📝 Source code
# File actionpack/lib/action_dispatch/middleware/static.rb, line 50
    def initialize(root, index: "index", headers: {}, precompressed: %i[ br gzip ], compressible_content_types: /\A(?:text\/|application\/javascript)/)
      @root = root.chomp("/").b
      @index = index

      @precompressed = Array(precompressed).map(&:to_s) | %w[ identity ]
      @compressible_content_types = compressible_content_types

      @file_server = ::Rack::File.new(@root, headers)
    end
🔎 See on GitHub

Instance Public methods

attempt(env)

📝 Source code
# File actionpack/lib/action_dispatch/middleware/static.rb, line 64
    def attempt(env)
      request = Rack::Request.new env

      if request.get? || request.head?
        if found = find_file(request.path_info, accept_encoding: request.accept_encoding)
          serve request, *found
        end
      end
    end
🔎 See on GitHub

call(env)

📝 Source code
# File actionpack/lib/action_dispatch/middleware/static.rb, line 60
    def call(env)
      attempt(env) || @file_server.call(env)
    end
🔎 See on GitHub