Browse files

Merge pull request #2 from nicferrier/master

here are my changes, if you want them
  • Loading branch information...
2 parents 6866925 + fcb42b2 commit 3fbf047113402d0c0bac58b921d2b5f6d203abb1 @technomancy committed Aug 17, 2012
Showing with 28 additions and 17 deletions.
  1. +25 −14
  2. +2 −2 bin/compile
  3. +1 −1 bin/detect
@@ -1,13 +1,20 @@
# Heroku buildpack: Emacs Lisp
-This is an Emacs Lisp Heroku buildpack. It is probably only useful
-with [Elnode](
+This is an Emacs Lisp Heroku buildpack for Elnode.
+First make sure you have at LEAST heroku gem version 2.11.0+
## Usage
+Make a git repository with a file start-elnode.el:
-;;; init.el
-(require 'elnode (concat load-file-name "elnode.el"))
+;;; start-elnode.el
+(setq package-archives '(("marmalade" . "")))
+(package-install 'elnode)
(defun handler (httpcon)
"Demonstration function"
@@ -16,34 +23,38 @@ with [Elnode](
`("Server" . ,(concat "GNU Emacs " emacs-version)))
(elnode-http-return httpcon "<html><body><h1>Hello from Emacs!</h1></body></html>"))
-(elnode-start 'handler (string-to-number (or (getenv "PORT") "8080")) "")
+ 'handler
+ :port (string-to-number (or (getenv "PORT") "8080"))
+ :host "")
(while t (accept-process-output nil 1))
- # requires heroku gem version 2.11.0+
- $ heroku create --stack cedar --buildpack
+add heroku as a remote to the repo:
+ $ heroku create --stack cedar --buildpack
+and then deploy the app by pushing to heroku:
$ git push heroku master
-----> Heroku receiving push
-----> Fetching custom buildpack
-----> Emacs Lisp app detected
-----> Downloading Emacs
- Downloading Emacs 24 pretest from
+ Downloading Emacs 24 pretest from github
-The buildpack will detect that your app has an `init.el` in the root
+The buildpack will detect that your app has a `start-elnode.el` in the root
and download a copy of the Emacs 24 pretest to bundle in your slug.
The Procfile for Emacs Lisp apps currently needs to untar that copy of
Emacs before running and symlink it to /tmp/emacs, like this:
- web: tar xzf emacs.tar.gz && ln -s $PWD/emacs /tmp/emacs; emacs/bin/emacs --daemon --load init.el
+ web: tar xzf emacs.tar.gz && ln -s $PWD/emacs /tmp/emacs; emacs/bin/emacs --daemon --load start-elnode.el
-This is obviously undesired since it means other users could interfere
-with this symlink, so a way to compile Emacs without referring to the
-/tmp directory needs to be discovered. Until then, don't use this
-buildpack for anything you would need to keep secure.
+## Re-compiling the buildpack Emacs
The current Emacs tarball is compiled from the pretest of version 24
with this invocation:
4 bin/compile
@@ -7,6 +7,6 @@ indent() {
echo "-----> Found an init.el file."
# TODO: cache this
-echo "Downloading Emacs 24 pretest from" | indent
-curl -s -o $1/emacs.tar.gz
+echo "Downloading Emacs 24 pretest from github..." | indent
+curl -L -s -o $1/emacs.tar.gz
echo "...done" | indent
2 bin/detect
@@ -1,6 +1,6 @@
-if [ -f $1/init.el ]; then
+if [ -f $1/start-elnode.el ]; then
echo "Emacs Lisp"
exit 0

0 comments on commit 3fbf047

Please sign in to comment.