2013-12-28

herokuでdjango動かしてみる。

この冬はLPICの受験勉強!

→スマホとかPCから勉強できる自分用の単語帳的なアプリが欲しい!

→Androidアプリ開発者レベル1だからとりあえずWebアプリで早急に作ろう!

→手軽にホスティングできて、手軽に作れるフレームワークで!

→heroku + python + django!

 

ということで、linux環境からherokuでdjango動かすまでの備忘録。っていうかherokuガイドの日本語訳w

詳しいやり方はherokuのstartガイド参照↓

https://devcenter.heroku.com/articles/getting-started-with-django

 

ちなみにdjangoデプロイするときにherokuのwsgirefのpipインストールの時に

python3系だと何故かコケちゃうので、バージョンは2.7でデプロイしてます。

 

  1. pipとかのインストール
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
apt-get install python-setuptools python-pip python-dev python-psycopg2 libpq-dev
virtualenv venv --python=/usr/bin/python --distribute
source venv/bin/activate
pip install django-toolbelt

 

※もしかしたらpython-setuptoolsインストールしなくてもイケるかも。

※sudo pip installとかやるとルートユーザ権限で実行される関係で、venvの環境外にインストールされちゃうっぽい。

 

  1. djangoアプリ作成
django-admin.py startproject hellodjango

 

3.Procfile(設定ファイル)作成

cd hellodjango
vim Procfile

で、以下を入力↓

web: gunicorn hellodjango.wsgi

 

  1. django起動確認
foreman start

でブラウザでhttp://localhost:5000を開き、"It Worked!"が出ていることを確認。

 

  1. インストールされているパッケージ一覧をrequirements.txtに記述
pip freeze > requirements.txt

 

  1. あとはお馴染みのherokuのデプロイコマンド
git init
git add .
git commit -m "Message"
heroku create
git push heroku master

 

  1. DB関連の設定

settings.py

# 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'),
)

 

wsgi.py

from django.core.wsgi import get_wsgi_application
from dj_static import Cling

application = Cling(get_wsgi_application())

 

ローカルとの差異で注意すべきところは

dj_database_url.config() で取ってくるのは環境変数のDATABASE_URLの値になるので、

import os
if not os.environ.has_key('DATABASE_URL'):
    os.environ['DATABASE_URL'] = 'postgres://postgres:password@localhost:5432/myapp'

って感じで「ローカルに環境変数が定義されていなければ環境変数定義する」 的な記述をしておく。

あとはherokuにデプロイしたあとにheroku側でコマンド実行(heroku run)

heroku run python manage.py syncdb

 

※Pythonのバージョンを設定する場合は

アプリのルート直下にruntime.txtってのを配置して、runtime.txt内にpython-3.3.2って書けば良い。

サポートしているバージョンは以下の3つ

python-2.7.4(runtime.txtが無いときのデフォルトバージョン)

python-3.3.2

pypy-1.9

 

ちなみにdjangoアプリのディレクトリ内でlsするとこんな感じ↓

Procfile  hellodjango  manage.py  requirements.txt runtime.txt

 

結局はDBの設定とProcfile, requirements.txt, runtime.txt入れるだけ動きます。

基本requirements.txt以外は一回設定したら二度と設定しないので

heroku用のテンプレート作っても良いっすね。

 

このエントリーをはてなブックマークに追加