Grifizoid

This is intended to be a simple Rack middleware for hosting site assets in a MongoDB GridFileSystem. Right now it assumes you're using Mongoid, mostly as a simple way to avoid needing any custom connection-management code

Unlike most similar tools, this is doing the lookup on the raw file path itself (optionally customized by passing a block to the initializer), not using a BSON ObjectID. The intended use-case for is storing site assets in GridFS directly and accessing them with normal human-friendly URLs, just like if they were sitting on your hard drive

It's sending a file handler not the raw data, so this should be low-memory use even for large files. It will set Etag and Last-Modified headers, and respond with a 304 Not Modified when possible. Any additional caching you should do yourself where appropriate

Installation

# Gemfile
gem 'grifizoid', :git => 'git://github.com/pogodan/grifizoid.git'

and bundle install

Use with Rails 3

# application.rb
config.middleware.use Rack::GridFS do |req|
  site      = Site.where(:host => req.host).first

  File.join(site.to_param, req.path_info)
end

Now someone going to http://mydomain.com/file.jpg will result in the middleware doing a query to find the site 'mydomain.com' (with an ID like 4d80c69f4cfad13cd100000c) and then looks for a GridFS file named 4d80c69f4cfad13cd100000c/file.jpg, sending it through to the client if found or else passing the request through to your app

Some ideas/code taken from: https://github.com/dusty/rack_grid https://github.com/skinandbones/rack-gridfs