この冬は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でデプロイしてます。
- 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の環境外にインストールされちゃうっぽい。
- djangoアプリ作成
django-admin.py startproject hellodjango
3.Procfile(設定ファイル)作成
cd hellodjango
vim Procfile
で、以下を入力↓
web: gunicorn hellodjango.wsgi
- django起動確認
foreman start
でブラウザでhttp://localhost:5000を開き、”It Worked!“が出ていることを確認。
- インストールされているパッケージ一覧をrequirements.txtに記述
pip freeze > requirements.txt
- あとはお馴染みのherokuのデプロイコマンド
git init
git add .
git commit -m "Message"
heroku create
git push heroku master
- 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用のテンプレート作っても良いっすね。