Plone on Heroku#

Dear Plone, welcome to 2015

Picture it. The year was 2014. I was incredibly moved and inspired by this blog entry:

Someone had finally done it. (zupo in this case, kudos!) Someone had finally beat me to implementing the dream of git push heroku plone. And I could not have been happier.

But something nagging would not let go: I still didn’t fully understand how the buildpack worked. Today I’m happy to say: that nag is gone and I now fully understand how Heroku buildpacks work… thanks to… wait for it… a Buildpack for Plock.

Plock Buildpack#

There’s a lot of the same things going on in both the Plone Buildpack and the Plock Buildpack, with some exceptions.

Experimental#

The Plock buildpack is highly experimental, still in development and possibly innovative. Here’s what it currently does:

  • Configures Python user site directory in Heroku cache
  • Installs setuptools in user site
  • Installs pip in user site
  • Installs Buildout in user site
  • Installs Plone in cache
  • Copies cache to build directory
  • Installs a portion of “user Plone” (the Heroku app’s buildout.cfg) in the build directory (not the cache)
  • Relies on the app to install the remainder (the Heroku app’s heroku.cfg). Most importantly the app runs Buildout which finishes quickly thanks to the cache & configures the port which is only available to the app (not the buildpack.)

Here’s an example:

# buildout.cfg
[buildout]
extends = https://raw.github.com/plock/pins/master/plone-4-3

[user]
packages = collective.loremipsum
# heroku.cfg
[buildout]
extends = buildout.cfg

[plone]
http-address = ${env:PORT}
# Procfile
web: buildout -c heroku.cfg; plone console

Opinionated#

The Plock Buildpack is built on Plock, an “opinionated” installer for Plone. It may eventually use Plock itself, but currently only uses Plock Pins.