3 ms·
"Buildpacks are just terrible." Elaborate please? CF uses a variant of them, and they're ultimately just a simple three-script harness to build and run your
by parasubvert 12y ago
"Buildpacks are just terrible."
Elaborate please? CF uses a variant of them, and they're ultimately just a simple three-script harness to build and run your app.
There are pros/cons vs. dockerfiles , chef/puppet/ansible, or just doing a Netflix style Aminator, I suppose, but "terrible" seems exagerrated.
- bcardarella 12y agoCustomization. Ever try to add a command-line tool to a buildpack? I don't understand why we cannot make use of apt as the EC2 instances that Heroku uses are just Ubuntu AMIs.
- parasubvert 12y agoSure. You can't make assumptions about the base distro with buildpacks, which is why you curl/untar dependencies. Dockerfiles are a bit better by allowing you to pick the base image (and thus distro), though there are tradeoffs with that too.
- latchkey 12y agoIt's a pain, but it isn't the end of the world or a disaster. I distribut some CLI tools with a NodeJS app I wrote. Here's the docs: https://github.com/lookfirst/convert/wiki/Compile https://github.com/lookfirst/convert/wiki/Compile
- cschmidt 12y agoI've found them to be fairly terrible. They work great until you need to do more than use pip to install stuff (I'm using python). So things as simple as matplotlib get hairy. You have to use a custom buildpack someone contributed (which is based on an old version). Now say I want to use python with R. It is a huge pain. You have to use heroku-buildpack-multi [1]. The problem is that environment variables and installed code from the first buildpack are invisible to the second. So you end up having to hack individual buildpacks, which is just gross. It worked in the end, but I wasted days on it. A concept like docker, where you fire up a container, install stuff with apt-get, and then save the results is greatly superior. [1] https://github.com/ddollar/heroku-buildpack-multi https://github.com/ddollar/heroku-buildpack-multi
- hobofan 12y agoI found a combination of buildpacks + docker really useful. We use the the slugbuilder from the flynn project[1] which gives us a finished version of the app in a .tgz which will than be extracted into a docker container that already has all the other necessary stuff setup (logging architecture etc.) which is needed in different parts of the application (webserver, background workers...) [1] https://github.com/flynn/slugbuilder https://github.com/flynn/slugbuilder