No description, website, or topics provided.
Shell ApacheConf
Clone or download
Pull request Compare This branch is 77 commits ahead, 555 commits behind heroku:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin Inverse logic Sep 16, 2014
conf Avoid moving files into www Nov 14, 2013
support give the download url to vulcan directly Jun 25, 2012
test test node_modules caching Aug 20, 2013
vendor remove unused asserts Jul 15, 2012
.gitignore ignore .DS_Store Jul 15, 2013 update changelog Mar 27, 2012 remove extra newline Mar 24, 2013
LICENSE add license Mar 21, 2012 Update Sep 30, 2015

Update 9/30/2015: This buildpack will cease to work on 11/4/2015 when Heroku switches to cedar-14. Please migrate to cedar-14 by using @hone's static buildpack. Here is an example Lineman project using his buildpack.

Old docs continue:

Heroku buildpack: Lineman

Not using this buildpack

** You probably don't need this buildpack **

Unless you're using Sass, this buildpack is probably not worth attempting to use. Use the default Node.js buildpack with a custom run script instead.

To do this, configure the official Node.js buildpack and then enable the installation of development dependencies:

$ heroku config:set BUILDPACK_URL=
$ heroku config:set NPM_CONFIG_PRODUCTION=false

Then, add a Procfile to your repo root if it doesn't already exist:

web: npm run production

Finally, define the production script if it wasn't already defined by your lineman archetype:

  "scripts": {
    "start": "lineman run",
    "test": "lineman spec-ci",
    "production": "lineman clean build && npm i express@3 && node -e \"var e = require('express'), a = e(); a.use(e.static('dist/')); a.listen(process.env.PORT)\""

Using this buildpack

This is a Heroku buildpack for Lineman apps.


Example usage:

$ heroku create --stack cedar --buildpack

Or, for an existing heroku app:

$ heroku config:set BUILDPACK_URL=

And the output will look like this when you push to heroku:

$ git push heroku master
-----> Heroku receiving push
-----> Fetching custom buildpack
-----> Lineman app detected
-----> Vendoring node 0.4.7
-----> Installing dependencies with npm ....
-----> Building runtime environment
-----> Building static web assets with lineman
Running "configure" task

Running "common" task

Running "coffee:compile" (coffee) task
File generated/js/ created.
File generated/js/ created.
>> Destination not written because compiled files were empty.

Running "less:compile" (less) task
File generated/css/app.less.css created.

Running "jshint:files" (jshint) task
>> 0 files lint free.

Running "handlebars:compile" (handlebars) task
>> Destination not written because compiled files were empty.

Running "jst:compile" (jst) task
File "generated/template/underscore.js" created.

Running "configure" task

Running "concat:js" (concat) task
File "generated/js/app.js" created.

Running "concat:spec" (concat) task
File "generated/js/spec.js" created.

Running "concat:css" (concat) task
File "generated/css/app.css" created.

Running "images:dev" (images) task
Copying images to 'generated/img'

Running "webfonts:dev" (webfonts) task
Copying webfonts to 'generated/webfonts'

Running "homepage:dev" (homepage) task
Homepage HTML written to 'generated/index.html'

Running "dist" task

Running "uglify:js" (uglify) task
File "dist/js/app.min.js" created.
Uncompressed size: 38578 bytes.
Compressed size: 4452 bytes gzipped (13217 bytes minified).

Running "cssmin:compress" (cssmin) task
File dist/css/app.min.css created.
Uncompressed size: 69 bytes.
Compressed size: 45 bytes gzipped (57 bytes minified).

Running "images:dist" (images) task
Copying images to 'dist/img'

Running "webfonts:dist" (webfonts) task
Copying webfonts to 'dist/webfonts'

Running "homepage:dist" (homepage) task
Homepage HTML written to 'dist/index.html'

Done, without errors.
       Web assets built
-----> Bundling Apache v2.2.19
-----> Discovering process types
       Procfile declares types   -> (none)
       Default types for Lineman -> web

-----> Compiled slug size: 34.8MB
-----> Launching... done, v9 deployed to Heroku

   9b88fd7..e4bfa19  HEAD -> master

Apache Modules

Custom Apache modules saved to a directory named apache_modules in your app root will be deployed to Heroku (under apache/modules in the slug). You'll need to make a corresponding change to config/httpd.conf – adding a line to load the module. Here's an example that will load the headers_module (assuming that exists under apache_modules in your app root):

LoadModule headers_module  modules/

Building Apache Modules

To build an Apache module, we'll use a Heroku one-off dyno:

$ heroku run bash

Once your one-off dyno is up and running, download a copy the Apache source, matching the version you'll be running in production. This buildpack uses 2.2.19.

$ curl | tar zx

Change to the Apache source directory:

$ cd httpd-2.2.19

Build the module with apxs

$ /app/apache/bin/apxs -i -c -Wl,lz modules/metadata/mod_headers.c

Last, copy (scp works great) the compiled module from the one-off dyno (/app/apache/modules) and commit it to your app's apache_modules directory (you might need to create this directory).

HTML5 PushState

To add support for pushstate urls you can use the mod_rewrite module. Follow the instructions above to build and add the mod_rewrite to your project. The only difference to note when building is mod_rewrite.c is found in modules/mappers instead of modules/metadata:

$ /app/apache/bin/apxs -i -c -Wl,lz modules/mappers/mod_rewrite.c

Once you have in your apache_modules directory you can add the following rewrite rule to config/httpd.conf:

# Handle push state urls
# any request that is NOT for a file or directory rewrite to index.html
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule (.*) /index.html [L,QSA]