読者です 読者をやめる 読者になる 読者になる

技術ネタとかの備忘録

最近の技術ネタとかの備忘録を書いていくブログです

DjangoアプリをHerokuへデプロイ

Python Django Heroku CircleCI PostgreSQL 技術

Pythonの勉強がてらDjangoアプリを作成して、Herokuへデプロイしてみました。

Djangoチュートリアル

こちらのチュートリアルに沿って作成したDjangoアプリをHerokuにデプロイします。

はじめての Django アプリ作成、その 1 | Django documentation | Django

Heroku向けの設定

DjangoアプリをHerokuへデプロイするために必要な設定がこちら。

Configuring Django Apps for Heroku | Heroku Dev Center

Heroku向けに以下のライブラリをインストールする必要があります。

  • dj-database-url(DBの接続先を環境変数から取得してくれる)
  • gunicorn(WSGIサーバ)
  • whitenoise(静的ファイルを配信してくれる)

なお、HerokuはSQLite3をサポートしていないため、Heroku上で動かす場合、他のDBを使う必要があります。 今回は無料で使えるPostgreSQLにしました。

Herokuへデプロイ

HerokuのGitリポにPushすれば問題なくデプロイできました。
あとは、DBのmigrateとDjangoのadminユーザを作って完了です。

$ heroku run python manage.py migrate
$ heroku run bash
Running bash on ...
~ $ python manage.py createsuperuser
...

簡単ですね。

ハマったこと

Djangoチュートリアルに沿って作成したアプリを動かして確認していたところ、日本語を入力すると"UnicodeDecodeError"が発生しました。

UnicodeEncodeError at /admin/polls/question/add/
‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)

原因は、オブジェクトを出力するメソッドに__str__を使っていたことでした。 メソッドを__str__から__unicode__に変更することでエラーが解消されました。

class Question(models.Model):
    ...
    def __str__(self):
        return self.question_text

class Question(models.Model):
    ...
    def __unicode__(self):
        return self.question_text