title: 【译】在Heroku上部署Django应用(1、配置)
type: categories
date: 2017-05-09 08:56:54
categories: Python
Heroku支持所有类型的Python应用,包括Django应用。需要说明的是,Django的手动配置很繁琐,最便捷的方法是直接在Heroku控制台生成相对应的应用。
这个是最便捷的方法,无需额外配置,极力推荐的一种形式。
$ django-admin startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile myproject
这条指令创建了一个预配置的Django应用。之后刷新Django应用即可。
对于一个已经存在的Django应用进行配置。
首先,最重要的一条是Heroku网站应用需要 Procfile文件。这个文件要放置在仓库根目录下。
Procfile
web: gunicorn myproject.wsgi --log-file -
gunicorn是我们推荐使用的Django应用生产环境服务器。 myproject
换成自己的工程名。
安装Gunicorn
$ pip install gunicorn
...
$ pip freeze > requirements.txt
安装 dj-database-url 来配置`DATABASE_URL
`环境。
$ pip install dj-database-url
...
$ pip freeze > requirements.txt
settings.py
# Update database configuration with $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
默认情况下,对于应用的每次请求循环,Django都会创建一个新的持久性数据库连接。这个一个昂贵的开销,会降低应用的性能。所以,更改配置如下。
settings.py
# Update database configuration with $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
更多的信息,可以查看Concurrency and Database Connections in Django.
Django应用,对于静态资源的配置和调试相对将困难。更改相关配置,将改变这一状态。
settings.py
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
关于静态资源的知识,可查看Django and Static Assets.
Django应用在生产环境是没有静态文件的服务的。添加Whitenoise来提升服务。
Whitenoise
$ pip install whitenoise
...
$ pip freeze > requirements.txt
settings.py
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
wsgi.py
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
原文地址:https://devcenter.heroku.com/articles/django-app-configuration