#!/usr/bin/env bash # bin/compile set -eo pipefail BIN_DIR=$(cd $(dirname $0); pwd) # absolute path ROOT_DIR=$(dirname $BIN_DIR) BUILD_DIR=$1 CACHE_DIR=$2 NAME=$($BIN_DIR/detect $BUILD_DIR) PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE:-$CACHE_DIR/pip_downloads} VIRTUALENV_DIRS="bin include lib" VENDORED_MEMCACHED="http://cl.ly/0a191R3K160t1w1P0N25/vendor-libmemcached.tar.gz" indent() { RE="s/^/ /" [ $(uname) == "Darwin" ] && sed -l "$RE" || sed -u "$RE" } virtualenv() { python - "$@" < /dev/null || true done echo "-----> Preparing virtualenv version $(virtualenv --version)" virtualenv --no-site-packages . | indent # create set-aside .heroku folder. mkdir .heroku # if pylibmc within requirements, use vendored libmemcached if (grep -Fxiq "pylibmc" requirements.txt) || (grep -Fiq "pylibmc=" requirements.txt) then echo "-----> Noticed pylibmc. Bootstrapping libmemcached." cd .heroku if [ -d "vendor/lib/sasl2" ]; then export LIBMEMCACHED=$(pwd)/vendor else curl -s -L -O $VENDORED_MEMCACHED tar -zxvf vendor-libmemcached.tar.gz > /dev/null rm vendor-libmemcached.tar.gz export LIBMEMCACHED=$(pwd)/vendor fi export LIBMEMCACHED=$(pwd)/vendor cd .. fi # if Django, append settings if [ "$NAME" = "Python/Django" ]; then echo "-----> Django settings injection" SETTINGS_FILE=$(ls **/settings.py | head -1) PROJECT=$(dirname $SETTINGS_FILE) echo "Injecting code into $SETTINGS_FILE to read from DATABASE_URL" | indent cat >>$SETTINGS_FILE < Installing dependencies using pip version $(bin/pip --version | awk '{print $2}')" PIP_DOWNLOAD_CACHE=$PIP_DOWNLOAD_CACHE bin/pip install --use-mirrors -r requirements.txt | indent set +e OUT=$(virtualenv --relocatable .) [ $? -ne 0 ] && { echo " ! Error making virtualenv relocatable" echo "$OUT" | indent exit 1 } set -e # store new artifacts in cache for dir in $VIRTUALENV_DIRS; do rm -rf $CACHE_DIR/$dir cp -R $dir $CACHE_DIR/ done