Create a gist now

Instantly share code, notes, and snippets.

Den of Clojure

Heroku @ Den of Clojure

About James Ward

Java Developer since: 1997

First Programming Language: Pascal

Favorite Programming Language: x86 Assembler

Heroku Clojure Quick Start

Seven steps to the Cloud

  1. project.clj

     (defproject hello-world "0.0.1"
       :dependencies [[org.clojure/clojure "1.3.0"]
                      [ring/ring-jetty-adapter "1.0.1"]])
  2. src/web.clj

     (ns web
       (:use [ring.adapter.jetty :only [run-jetty]]))
     (defn app [req]
       {:status 200
        :headers {"Content-Type" "text/plain"}
        :body "Hello, world"})
     (defn -main [port]
       (run-jetty app {:port (Integer. port)}))
  3. Procfile

     web: lein trampoline run -m web $PORT
  4. Commit the files to a Git repo:

     git init
     git add Procfile project.clj src
     git commit -m init
  5. Create a new app on Heroku:

     heroku create
  6. Push the app to Heroku:

     git push heroku master
  7. Open the app:

     heroku open

Heroku Basics

So simple.


  1. Copy git repo to Heroku:

     git push heroku master
  2. Heroku uses a "Buildpack" to compile code

  3. Heroku creates a "slug" file

  4. Heroku deploys "slug" onto a "dyno"

  5. Heroku starts the process


User has 0 or more Applications

Application has 1 git repository

Application has 0 or more Processes

Process is defined in a Procfile

Process named "web" can listen on one port for HTTP

Process runs on 0 or more Dynos

Dynos are isolated (LXC) and managed execution environments

Application has 0 more more external resources - Heroku Add-ons

Buildpack receives a git push and produces a "slug"

Slug contains the non-system dependencies for all Processes

Dynos are ephemeral and stateless

HTTP(s) requests are randomly routed to the "web" Dynos


$0.05 / dyno hour

750 free dyno hours per application per month

The Heroku CLI

$ heroku help

Heroku Add-ons

Add-ons are third party cloud services for things like caching, databases, monitoring, management, etc

Noir on Heroku

Small and simple is wonderful.

  • project.clj

      (defproject hello-clojure-compojure "0.1.0-SNAPSHOT"
        :main web
        :dependencies [[org.clojure/clojure "1.4.0"]
                       [noir "1.2.1"]])
  • src/web.clj

      (ns web
        (:use noir.core)
        (:require [noir.server :as server]))
      (defpage "/" [] "hello, world")
      (server/start (Integer/parseInt (or (System/getenv "PORT") "8080")))
  • Procfile

      web: lein trampoline run

Heroku for Clojure

Links to help you get started.

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