Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save leereilly/3157115 to your computer and use it in GitHub Desktop.
Save leereilly/3157115 to your computer and use it in GitHub Desktop.
Static Sites with Ruby on Heroku/Cedar

This article was forked from Marshall Huss's Bamboo stack article and updated by Lee Reilly. Lee is a toolsmith and master pintsman hacking on GitHub Enterprise.

Static Sites with Ruby on Heroku/Cedar

Sometimes you just have a static website with one or two pages. Here is a simple way to host your static site and cache it on Heroku using a Rack app.

Your folder should be organized like this:

- MySite
  |- config.ru
  |- Gemfile
  |- Gemfile.lock
  |- public
    |- index.html
    |- images
    |- js
    |- css

In Gemfile file add the following:

source :rubygems

gem 'rack'

You should use bundler to generate the Gemfile.lock file:

GEM
  remote: http://rubygems.org/
  specs:
    rack (1.4.1)

PLATFORMS
  ruby

DEPENDENCIES
  rack

In config.ru file add the following:

use Rack::Static, 
  :urls => ["/images", "/js", "css"],
  :root => "public"

run lambda { |env|
  [
    200, 
    {
      'Content-Type'  => 'text/html', 
      'Cache-Control' => 'public, max-age=86400' 
    },
    File.open('public/index.html', File::RDONLY)
  ]
}

This assumes that your template uses relative references to the images and stylesheets. Go ahead and deploy the app. If you are not sure how to deploy to Heroku check out the quickstart guide.

And there you go, a static site being served on Heroku completely cached and easily served using a single dyno.

You can see a GitHub repository with a working example here; the deployed site on Heroku can be seen here.

If this article is incorrect or outdated, or omits critical information, please let us know. For all other issues, please see our support channels.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment