Files
heroku-buildpack-python/Readme.md
T
2011-05-18 10:28:36 -07:00

54 lines
2.1 KiB
Markdown

Python Language Pack
====================
The Python Language Pack (PLP) is a language pack for running Python and Django
apps on Heroku.
If `requirements.txt` is present, the PLP considers the directory a Python app
with packages to install via pip.
Furthermore, if `${PROJECT}/settings.py` is present, the PLP considers the
directory a Python/Django app, and patches `settings.py` to parse the Heroku
DATABASE_URL config vars. It then sets default process types to use the Django
web server and console.
External Language Pack
----------------------
Cutting-edge development is taking place in this repo. To use this on Heroku,
set a `LANGUAGE_PACK_URL` config var with a fully authenticated URL to this repo:
$ heroku config:add LANGUAGE_PACK_URL=https://nzoschke:XXXXXXX@github.com/heroku/language-pack-python.git
On next push, slug-compiler will use this LP instead of the built-in one.
Compile Hooks
-------------
The PLP uses a Makefile for user-controlled hooks into slug compilation. If
present, the `make environment` rule will be eval'd in the compile script, allowing
user-defined exports.
A sample Makefile
(<a href="https://github.com/heroku/language-pack-python/raw/master/test/canary_django/Makefile">raw</a>)
to force a re-build of every pip package is:
environment:
export PIP_OPTS=--upgrade
Django settings.py
------------------
The PLP injects code into `settings.py` to alias every Heroku database URL
config var. Every variable of the format `${NAME}_URL => postgres://` will be
added to the `settings.DATABASES` hash.
On an app with both a shared SHARED_DATABASE_URL and a dedicated
HEROKU_POSTGRESQL_RED_URL that is promoted to DATABASE_URL, `settings.DATABASES`
will be:
{
'DATABASE': {'ENGINE': 'psycopg2', 'NAME': 'dedicated', ...},
'HEROKU_POSTGRESQL_RED': {'ENGINE': 'psycopg2', 'NAME': 'dedicated', ...},
'SHARED': {'ENGINE': 'psycopg2', 'NAME': 'shared', ...},
'default': {'ENGINE': 'psycopg2', 'NAME': 'dedicated', ...},
}
These aliases can be referenced and further modified at the bottom of `settings.py`.