【译】在Heroku上部署Django应用(一)

title: 【译】在Heroku上部署Django应用(1、配置)
type: categories
date: 2017-05-09 08:56:54
categories: Python

tags: [Django, Heroku]

Heroku支持所有类型的Python应用,包括Django应用。需要说明的是,Django的手动配置很繁琐,最便捷的方法是直接在Heroku控制台生成相对应的应用。

创建Django应用

1、利用Heroku创建

这个是最便捷的方法,无需额外配置,极力推荐的一种形式。

2、利用Django指令

$ django-admin startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile myproject

这条指令创建了一个预配置的Django应用。之后刷新Django应用即可。

已有Django应用的配置

对于一个已经存在的Django应用进行配置。

1、基本配置

首先,最重要的一条是Heroku网站应用需要 Procfile文件。这个文件要放置在仓库根目录下。

Procfile

web: gunicorn myproject.wsgi --log-file -

gunicorn是我们推荐使用的Django应用生产环境服务器。 myproject换成自己的工程名。

安装Gunicorn

$ pip install gunicorn
...
$ pip freeze > requirements.txt

2、数据库配置

安装 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)

3、数据库连接的持久性

默认情况下,对于应用的每次请求循环,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.

4、静态资源

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.

5、Whitenoise

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

你可能感兴趣的:(django,python,heroku)