class ActionDispatch::FileHandler
Action Dispatch FileHandler
This endpoint serves static files from disk using Rack::Files
.
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.
Constants
Accept-Encoding
value -> file extension
{
"br" => ".br",
"gzip" => ".gz",
"identity" => nil
}
Public class methods
new(root, index: "index", headers: {}, precompressed: %i[ br gzip ], compressible_content_types: /\A(?:text\/|application\/javascript|image\/svg\+xml)/)
Source code GitHub
# File actionpack/lib/action_dispatch/middleware/static.rb, line 55
def initialize(root, index: "index", headers: {}, precompressed: %i[ br gzip ], compressible_content_types: /\A(?:text\/|application\/javascript|image\/svg\+xml)/)
@root = root.chomp("/").b
@index = index
@precompressed = Array(precompressed).map(&:to_s) | %w[ identity ]
@compressible_content_types = compressible_content_types
@file_server = ::Rack::Files.new(@root, headers)
end
Public instance methods
Source code GitHub
# File actionpack/lib/action_dispatch/middleware/static.rb, line 69
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
Source code GitHub
# File actionpack/lib/action_dispatch/middleware/static.rb, line 65
def call(env)
attempt(env) || @file_server.call(env)
end