dassimen.log

サーバーサイドエンジニア脱脂綿のログ。

【AdventCalender】Djangoアプリのdeployができないエンジニアの卵の嘆き

この記事が誰かの助けになる事を祈りつつ。

これはトキワの森AdventCalenderの3日目です。

qiita.com

イケてる技術記事を書きたかったのですがそんな技術力は無く。

少し前から行き詰まり続けているDjangoアプリのherokuデプロイが成功したよ!
という話を書きたかったのですがどうやら解決しないようなので、
いっそ私が試した事全てを書き散らかします...!

ググって集めた情報の集約にはなっているかと思います。

事象

自作のDjangoアプリを以下記事参考にherokuにデプロイするが、500エラーが出る。

qiita.com

ちなみにこの記事に辿り着く迄にも様々なごたごたがあったのだが、割愛。

環境

Django==2.1.2
django-heroku==0.3.1
django-toolbelt==0.0.1
gunicorn==19.9.0
whitenoise==4.1

切り分け

切り分け1段階目

最初は「Django heroku 500」などで検索していたのだが、「Debug=False」の時だけ発生する云々、という書き込みを見つけた。
そこで開発環境(ローカル、500は出ていない)のsettings.pyを「Debug=True」(本番環境と同値)にしてみた所、開発環境でも再現した。

切り分け2段階目

Debug=Falseの時は、settings.pyのALLOWED_HOSTSが使われるらしい。
(Trueの場合は[]でも動く)
この項目に['*']を与えてみたが動かず。

切り分け3段階目

本番環境のtemplateフォルダに404.htmlを配置し、urls.pyに存在しないページを指定すると404ページが出た。
Debug=Trueの時は使わないが、Debug=Falseの時は静的ファイルを読み込む際にwhitenoiseというライブラリを利用する。
この設定のどこかが間違っているのか?

試したこと

heroku公式のドキュメントに従ってwhitenoise設定

何はともあれ公式。
devcenter.heroku.com 結果:変化ナシ

manage.py collectstatic

stackoverrun.com こちらのサイトで(自動翻訳掛かって? か非常に読み辛かったのですが)、
collectstaticメソッドを実行するといいという所までは読めて、実行してみました。
結果:staticfilesフォルダにCSSが大量作成された後に開発環境を開いてみると、500が出ずに目的のページへ。
しかし本番環境へ同じファイルをcommit&pushしてみましたが動かず。
本番環境内のmanage.pyでcollectstaticを実行しましたがエラーが出て最後まで実行されず。
collectstaticメソッドが何をしてるか知るのが先ですね。

現状

流石に悩み過ぎて悲しくなってきたので、Debug=Trueにして開発しています。

Debug=Trueの場合に、exceptionが出た場合に詳細なエラー画面が表示されるという問題があります。
Railsのルーティングエラーでよく見るやつ)

しかし私、12月12日のクソアプリAdventCalenderに登録してしまっているのに現状殆どソースが書けてない...!

qiita.com

出せないよりは現状でも出した方が幾許かはマシじゃろう...
CSRFとかされたらその時はその時じゃい。 と考えて今からちょくちょくソース書きます。

書き終わったらまたこの問題に取り組みます。

あと試行錯誤のうち取るに足りないものを端折りました。

余談

PythonのWEBフレームワークで、responderというものが新しく出たそうです。
https://blog.ikedaosushi.com/entry/2018/12/01/195512

これも触ってみたい(悪い癖)。