A simple Sinatra-based font hosting rack application that utilizes HTTP caching and Allow-Access-Control-Origin properly and generates the corresponding @font-face-CSS file on the fly.
Create a Gemfile:
source :rubygems gem 'rack-fontserve'
Create a config.ru:
require 'bundler/setup' require 'rack-fontserve' ::.set :fonts_path, './fonts' run ::
Create a directory 'fonts', place your fonts inside there in subfolders, where each font format file has the same name as the directory:
fonts/iconic_stroke/ + iconic_stroke.eot + iconic_stroke.ttf + iconic_stroke.svg
That's it! Run with
rackup, push to heroku, or mount it in an existing Rails 3 app by adding rack-fontserve to your gemfile, setting the fonts path and mounting the app in your routes.rb file:
mount ::, :at => "/fonts"
You can see a demo of all fonts in the fonts_path at the root page (/). To deactivate demo mode, use Rack::Fontserve.set :demo, false.
The font name is the name of the font's directory, so in the above example, the font would be called 'iconic_stroke'.
Custom font CSS
font_name.css file is found in the subdirectory, this file will be rendered instead of the auto-generated css. If you want to tweak your css settings, copy and paste the auto-generated css into such a file and customize it to your liking!
Incorporate font licenses into CSS
If you place a text file named LICENSE inside some font's subdirectory, this file's content will automatically be added as a CSS comment at the top of your auto-generated CSS. This won't happen when using custom css, so make sure your custom css has the license added as you want it.
Improve the CSS syntax (kill unneccessary blank lines)
Make the scope selector for svg fonts configurable
Make the fall-back fonts configurable
Add an “all.css” action that aggregates all fonts into one file
Note on Patches/Pull Requests
Fork the project.
Make your feature addition or bug fix.
Add tests for it. This is important so I don't break it in a future version unintentionally.
Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
Send me a pull request. Bonus points for topic branches.
Copyright © 2011 Christoph Olszowka. See LICENSE for details.