将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
welcome-to-django.png

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
广告
将在 10 秒后关闭
bannerAds