TaKesso's Tech Blog

Web中心の技術メモ

Django Girls Tutorial をやってみて詰まったところ

諸事情によりPython/Djangoをやることになり、Django Girls Tutorialをやってみました。 やってみたところ、いくつか詰まった箇所があったのでメモしておこうと思います。

Django Girls Tutorial って何?

比較的多くの人がオススメしているDjangoチュートリアルです。自分は知人にオススメされてやってみた勢です。

qiita.com qiita.com

チュートリアルの目次(+雑メモ)

詰まったところや詰まりやすそうなところに★つけてます

詰まりポイントと解決策

手順通りにやると確実に詰まる箇所が2つありました。両方ともデプロイ!のところです。1つずつ見ていきます。

①Psycopg

発生する事象

『Herokuにデプロイできないよ〜〜〜』

問題詳細

  • チュートリアルに以下のような手順があります

    ファイルを開いて、最終行に次の1行を追加しましょう: psycopg2==2.5.4 これは、あなたのアプリケーションをHerokuで動かすために必要な1行です。

  • Psycopgは公式ドキュメントによると

    Psycopg is the most popular PostgreSQL database adapter for the Python programming language.(Psycopgは、Pythonプログラミング言語のための最も一般的なPostgreSQLデータベースアダプタです。)

  • 手順の通りに進めると、Herokuにデプロイする際に以下のようなエラーになります
    • Command "python setup.py egg_info" failed

解決策

  • まずpsycopg2をアップグレードしてください
    • pip install --upgrade psycopg2
  • 次にアップグレード後のpsycopg2のバージョンを確認してください
    • pip freeze
  • 最後にrequirement.txtにそのバージョンを記載したら完了です
    • psycopg2==O.O.O

②WhiteNoise

発生する事象

『なんかローカルがエラーになってる!?さっきまで動いてたのに...!!』

問題詳細

  • このチュートリアルでは、Herokuにデプロイするにあたって、WhiteNoiseを使っています
    • WhiteNoiseはこの記事によると

      WSGIアプリケーションのための静的ファイルを配信するのを簡単にしてくれるライブラリです。

  • 手順通り pip install dj-database-url gunicorn whitenoise すると、WhiteNoise v4.0 がインストールされます
  • このv4.0にはブレーキングチェンジがあります...!
    • 公式ドキュメントによると↓とのこと

      The WSGI integration option for Django (which involved editing wsgi.py) has been removed. Instead, you should add WhiteNoise to your middleware list in settings.py and remove any reference to WhiteNoise from wsgi.py. (DjangoWSGI統合オプション(wsgi.pyの編集を含む)は削除されました。 代わりに、settings.pyのミドルウェアリストにWhiteNoiseを追加し、wsgi.pyからWhiteNoiseへの参照を削除する必要があります。)

  • これに対応できていないため、以下のようなエラーが出ます
    • '(Djangoプロジェクト名).wsgi.application' could not be loaded;

解決策

  • mysite/settings.pyのMIDDLEWAREに、以下を追記する
  • mysite/wsgi.pyの編集(追記)をしない
    • 次にmysite/wsgi.pyファイルを開き、最終行に次のとおり追加してください と書いてありますが、無視してください

終わりに

初学者の方がこれ系をやるときは書かれている通りのバージョンで実施することが大事かな、と思います。書かれている通りのバージョンでやっていると、前提が整うのでエラーの原因を探しやすいかなと思います。

かくいう自分が書かれている通りのバージョンでやらなくて詰まりまくったので一応それも記載しておきます。

[残念な例]
  • 『プロジェクトの諸事情でPython2.7系で進めます〜』
    • WhiteNoise v4.0 がPython3.3未満はサポート対象外
    • あるいは、pip install whitenoise==X.x.x みたいな感じで、2.7系に対応するバージョンを指定してあげればいいかもしれません
      • が、個人的にはバージョンを下に揃えるアプローチは好きじゃないので非推奨です
  • 『今の最新のPython3.7系でやるっす!!!』
    • python manage.py migrate でエラー発生
    • この記事によると、↓とのこと

      You’re not doing anything wrong; this is a problem between Django and Python 3.7. Django has a fix, but that fix hasn’t made it into a new version yet.(君は悪くないよ。DjangoとPython3.7の問題でね。修正されてるんだけど、まだ新しいバージョンが出てないんだよ。)

以上! お疲れっした