Django製apiをherokuでデプロイする（自分用メモ）

##仕様
・Python2.7.10
・DBは、ローカルはsqlite3、本番はpostgreSQL
・DjangoRESTFrameworkを使用
・あらかじめVirtualenvで仮想環境を作っている前提

##手順
<b>1</b>.`cd [DjangoProjectのpath]`
<b>2</b>.requirements.txtを生成。（Python版package.jsonとかgemfile的な）
`pip freeze > requirements.txt` を叩けば一発でvirtualenvのpipに入ってるやつを持ってこれる。
僕の場合こんな感じ

```requirements.txt
dj-database-url==0.4.1
Django==1.9.7
django-filter==0.13.0
djangorestframework==3.3.3
psycopg2==2.6.1
```
<b>3</b>.`vi Procfile`で以下を記入
`web: python manage.py runserver 0.0.0.0:$PORT --noreload`
<b>4</b>.setting.pyのDB部分を変更

```python:setting.py
import os
import dj_database_url

DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
if bool(os.environ.get('LOCAL_DEV', False)):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', 
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'USER': '',                      
            'PASSWORD': '',             
            'HOST': '',                     
            'PORT': '',                     
        }
    }
```
(<b>5</b>.pycファイルをコミットしたくない人は.gitignoreを作る)
<b>6</b>.herokuにpush
`git init`
`git add .`
`git commit -m "hogegggggge"`
`heroku create [アプリ名]`
`git push heroic master`

すると

``` 
remote:            raise ImproperlyConfigured("You're using the staticfiles app "
remote:        django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
remote: 
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote: 
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote: 
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
remote: 
remote:        https://devcenter.heroku.com/articles/django-assets
```
と出たので、
setting.pyに以下を追記

```python:setting.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/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)
#追記終わり
```
ついでに、
`heroku config:set DISABLE_COLLECTSTATIC=1`
を実行。
そして、`git push heroku master`を実行。

```
Counting objects: 31, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (28/28), done.
Writing objects: 100% (31/31), 8.84 KiB | 0 bytes/s, done.
Total 31 (delta 10), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing python-2.7.11
remote:      $ pip install -r requirements.txt
remote:        Collecting dj-database-url==0.4.1 (from -r requirements.txt (line 1))
remote:          Downloading dj-database-url-0.4.1.tar.gz
remote:        Collecting Django==1.9.7 (from -r requirements.txt (line 2))
remote:          Downloading Django-1.9.7-py2.py3-none-any.whl (6.6MB)
remote:        Collecting django-filter==0.13.0 (from -r requirements.txt (line 3))
remote:          Downloading django_filter-0.13.0-py2.py3-none-any.whl
remote:        Collecting djangorestframework==3.3.3 (from -r requirements.txt (line 4))
remote:          Downloading djangorestframework-3.3.3-py2.py3-none-any.whl (662kB)
remote:        Collecting psycopg2==2.6.1 (from -r requirements.txt (line 5))
remote:          Downloading psycopg2-2.6.1.tar.gz (371kB)
remote:        Installing collected packages: dj-database-url, Django, django-filter, djangorestframework, psycopg2
remote:          Running setup.py install for dj-database-url: started
remote:            Running setup.py install for dj-database-url: finished with status 'done'
remote:          Running setup.py install for psycopg2: started
remote:            Running setup.py install for psycopg2: finished with status 'done'
remote:        Successfully installed Django-1.9.7 dj-database-url-0.4.1 django-filter-0.13.0 djangorestframework-3.3.3 psycopg2-2.6.1
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 41.7M
remote: -----> Launching...
remote:        Released v6
remote:        https://cashe-api.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/cashe-api.git
 * [new branch]      master -> master
```

いけました。
あとは、
`heroku run python manage.py migrate`
で、heroku上のDBの初期設定
`heroku open`
でブラウザでみれます。
詳しくは、
[公式ページ](https://devcenter.heroku.com/articles/django-app-configuration)を見てください。

##参考
http://source.hatenadiary.jp/entry/2013/02/05/173636
http://qiita.com/jtwp470/items/0034c85130928851ce72