This is my fork of the official Heroku Ruby
buildpack. Use it when
creating a new app:
heroku create myapp --buildpack \
https://github.com/tpope/heroku-buildpack-ruby-tpope
Or add it to an existing app:
heroku config:add \
BUILDPACK_URL=https://github.com/tpope/heroku-buildpack-ruby-tpope
Or just cherry-pick the parts you like into your own fork.
Contained within are a few tiny but significant differences from the official
version, distilled from project-specific buildpacks I’ve created in the past.
If the COMPILE_TASKS config variable is set, it will be passed verbatim to a
rake invocation.
You can use this for all sorts of things. My favorite is db:migrate.
Let’s take a look at the standard best practice for deploying Rails apps to
Heroku:
heroku maintenance:on.git push heroku master. This restarts the application when complete. Ifheroku run rake db:migrate.heroku restart. This is necessary so the app picks up on the schemaheroku maintenance:off.That’s five different commands, none of them instantaneous, and two restarts.
The most common response to this mess is to wrap deployment up in a Rake task,
but now you have two problems: a suboptimal deployment procedure, and
application code concerned with deployment.
Now let’s take a look at a typical deploy when COMPILE_TASKS includes
db:migrate:
git push heroku master.
rake db:migrate fires. The app continues working unless theWe’ve reduced it to a single step, limiting our need for maintenance mode to
destructive migrations. Even in that case, it’s not always strictly
necessary, since the window for breakage is frequently only a few seconds. Or
with a bit of planning, you can avoid this situation entirely.
Twelve-factor snobs (of which I am one) would generally argue that
admin processes belong in the run stage, not the build stage. I agree in
theory, but it in practice, boy does this make things a whole lot simpler.
undefinedBroken and disabled pending further investigation.undefined
This takes the upcoming and previously deployed commit SHAs and makes them
available as $REVISION and $ORIGINAL_REVISION for the duration of the
compile. They are also written to HEAD and ORIG_HEAD in the root of the
application for easy access after the deploy is complete.
These can be used from COMPILE_TASKS to make a poor man’s post-deploy hook.
We use cookies
We use cookies to analyze traffic and improve your experience. You can accept or reject analytics cookies.