Search code examples
rubyfilestaticrack

How to serve static files via Rack?


I am currently developing a Rack-based application and want to redirect all file requests (e.g. filename.filetype) to a specified folder.

Rack::Static only supports file requests for a special folder(e.g. "/media").

Do I have to write my own Rack middleware or does an out-of-the-box solution exist?


Solution

  • To redirect every request to a particular path, use Rack::File (for some reason this class is absent in recent documentation, but it is still part of the latest Rack):

    run Rack::File.new("/my/path")
    

    To redirect every request, and add an HTML index of all files in the target dir, use Rack::Directory:

    run Rack::Directory.new("/my/path")
    

    To combine several directories or serve only a some requests from the target dir:

    map "/url/prefix" do
      run Rack::File.new("/my/path")
    end
    
    # More calls to map if necessary...
    
    # All other requests.
    run MyApp.new