将Django 1.5.2部署到Heroku上
[!注意]
这篇文章是将2013年08月16日在momoto.github.io上发布的内容转移到Qiita的。
我会在Heroku提供的PaaS上部署Django 1.5.2的web应用程序框架。Python版本为2.7。
安装django-toolbelt
从安装django-toolbelt开始。在此之前必须先安装Python和virtualenv。
首先,创建一个用于建立Python环境的目录。
$ mkdir {application_root}
$ cd {application_root}/
使用 virtualenv 1.10.1 创建独立的 Python 环境。
$ virtualenv-2.7 venv --distribute
New python executable in venv/bin/python2
Also creating executable in venv/bin/python
Installing Setuptools......................done.
Installing Pip.............................done.
$ source venv/bin/activate
使用pip 1.4.1安装django-toolbelt 0.0.1。
(venv) $ pip install django-toolbelt
Successfully installed django-toolbelt django psycopg2 gunicorn dj-database-url dj-static static
Cleaning up...
创建Django项目
我们将创建一个可以在Heroku上部署的Django项目。在这个过程中,我们需要调整Django的配置,以使其在Heroku平台上正常运行。
使用django-admin.py创建一个项目。
(venv) $ django-admin.py startproject {project_name} .
在应用程序的根目录中准备Procfile、requirements.txt和.gitignore文件。 Procfile中声明了在Heroku的dynos上执行的命令。 requirements.txt中记录了所需的Python包。 .gitignore文件明确了Git不追踪的文件。
(venv) $ vi Procfile
web: gunicorn {project_name}.wsgi
(venv) $ pip freeze > requirements.txt
Django==1.5.2
dj-database-url==0.2.2
dj-static==0.0.5
django-toolbelt==0.0.1
gunicorn==17.5
psycopg2==2.5.1
static==0.4
wsgiref==0.1.2
(venv) $ vi .gitignore
venv
*.pyc
staticfiles
在{project_name}/settings.py中,需要调整数据库URL和静态文件的路径。
# Parse database configuration from $DATABASE_URL
import dj_database_url
DATABASES['default'] = dj_database_url.config()
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Allow all host headers
ALLOWED_HOSTS = ['*']
# Static asset configuration
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
同样地,也需要修改 {project_name}/wsgi.py 文件的内容。
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())
3. 将其部署到Heroku上。
我們將把建立的 Django 專案部署到 Heroku 上。需要使用 Git、Heroku Toolbelt 和 Heroku 使用者帳戶。
使用Git创建本地仓库。
(venv) $ git init
Initialized empty Git repository in ~/{application_root}/.git/
(venv) $ git add .
(venv) $ git commit -m "Initial commit"
[master (root-commit) 691c642] Initial commit
8 files changed, 254 insertions(+)
create mode 100644 .gitignore
create mode 100644 Procfile
create mode 100644 requirements.txt
...
使用Heroku Toolbelt在Heroku上创建应用程序。
(venv) $ heroku create
Creating {application_name}... done, stack is cedar
http://{application_name}.herokuapp.com/ | git@heroku.com:{application_name}.git
Git remote heroku added
使用Git将本地仓库推送到Heroku平台。
(venv) $ git push heroku master
-----> Python app detected
-----> No runtime.txt provided; assuming python-2.7.4.
-----> Preparing Python runtime (python-2.7.4)
-----> Installing Distribute (0.6.36)
-----> Installing Pip (1.3.1)
-----> Installing dependencies using Pip (1.3.1)
Installing collected packages: Django, dj-database-url, dj-static, django-toolbelt, gunicorn, psycopg2, static
Successfully installed Django dj-database-url dj-static django-toolbelt gunicorn psycopg2 static
Cleaning up...
-----> Discovering process types
Procfile declares types -> web
-----> Compiled slug size: 34.3MB
-----> Launching... done, v5
http://{application_name}.herokuapp.com deployed to Heroku
4. 激活管理网站
如果要启用管理网站,请取消注释`INSTALLED_APPS`中的`django.contrib.admin`行。`INSTALLED_APPS`在`{project_name}/settings.py`文件中定义。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
'django.contrib.admindocs',
)
同样地,在{project_name}/urls.py文件中取消注释url(r’^admin/’, include(admin.site.urls))这一行。
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Uncomment the admin/doc line below to enable admin documentation:
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
在将INSTALLED_APPS更改并推送到Heroku之后,需要在Heroku平台上运行python manage.py syncdb。如果要在Heroku平台上运行命令,则使用heroku run。
(venv) $ heroku run python manage.py syncdb
Running `python manage.py syncdb` attached to terminal... up, run.4816
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
You just installed Django's auth system, which means you don't have any superusers defined.
...
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
请看一下
-
- Getting Started with Django on Heroku | Heroku Dev Center
- Django documentation | Django