親です。

子ども産まれたんで育児とかについて書きます。映画とか心理学とかITとかの趣味についても書きます。

【Python】よう分からんけどHerokuでDjangoAppをデプロイ → できなかった。。→ できた!!

どもっす。ぜんっぜんわかんねえんだけどHerokuとGitHub使ってDjangoのアプリをデプロイする。流れだけだいたい掴んだので、その流れに沿って参考のページを貼っつける、この記事は悲しいキメラ...

(注:この記事では最終的に上手く公開できず諦めました。。)
(注:その後できました!)

環境

Mac 10.13.5
Python 3.6.4
Django 2.0.6

大体の流れ

見てる感じ、大体の流れはこんなん。

  1. 全ての前提
    1. Djangoでアプリ作る
    2. Herokuに登録する
    3. GitHubに登録する
  2. Django側の準備
    1. DBをPostagreにする
    2. 依存状態を記録したりcssとかをまとめたりする作業
  3. Herokuの準備
    1. Herokuログイン
    2. HerokuでAppをcreate
  4. GitHub側の準備
    1. 新規リポジトリ作成
    2. リモートにする
    3. ソースをPush
  5. 再びHerokuでの処理
    1. HerokuでGitHubと連携をとってデプロイ

ひとつずつ参考のページ貼る

全ての前提

Djangoでアプリ作る, Herokuに登録する, GitHubに登録するのみっつはまあ普通に作ったり登録するだけだから省くね。

Django側の準備

DBをPostagreにしたり依存状態を記録したり色々する

Django2.0でHerokuデプロイ手順
・procfileの作り方
なんか拡張子のないふざけたファイルがあるらしいそれがprocfile。どうやって作るんだよって思うんだけど、普通に新規ファイル作成から拡張子なしで作ればいい。メモ帳とかで開いて、編集できる。

Herokuの準備

Herokuログイン
heroku login

メールとパス聞かれる。
(俺はこんときパスをicloudのキーチェーンにしてたせいで全然入れなかった。)

HerokuでAppをcreate
heroku create

結果をメモっとく。(どこで使うのかは分からん)
ここまでやると、HerokuのダッシュボードにAppが現れる。

GitHub側の準備

新規リポジトリ作成, リモートにする, ソースをPush

全部下記のページ通りにやった。
【GitHub超初心者入門】この前初めてGitHubを使い始めたエンジニア見習いが書くGitHubの使い方と実践~とりあえず一緒に動かしてみようぜ!~
ただ

$ git remote add origin https://github.com/あなたのUSER_ID/HelloGit.git

のところで

fatal: remote origin already exists.

がでた。
対処法はこちら。
Gitで fatal: remote origin already exists. というメッセージが出る場合 - ponkiti's blog

再びHerokuでの処理

HerokuでGitHubと連携をとる

これは下記ページの、「HerokuでGitHub連携設定」以下を実施。
Step 4: HerokuとGitHubを連携させて自動デプロイ環境を作ろう! · Meteor アプリを Heroku にデプロイしよう!

できた!!!

いえーい終わったぜ!デプロイや夢の!とか思ったけど、「Heroku | Welcome to your new app!」と表示されただけだった。え、俺のアプリは?welcomeじゃないよ。

優しいひとからリプがくる

twitterで管を巻く様子



優しい人からリプとどく


(ちな、この方gitの記事も教えてくれた。ありがたや〜〜)

やってみる①(DEBUGモードの修正)

とりあえず、settings.pyのデバッグをTrueに。
するとHerokuダッシュボードのActivityにて「Build failed」の文言が。詳細をみると、runtime.txt内のpythonのバージョン指定がpythonではなくてPythonになってるよ、と。修正する。openAppすると、welcome画面ではなくなっている。
f:id:MaximoNelson49:20180621110406p:plain
進んだのかどうかは分からんが、まあ変化があった。

やってみる②(procfileの修正)

procfileって難しそうだよな〜〜とか思って覗いてみると、
f:id:MaximoNelson49:20180621110652p:plain
アプリ名〜〜そこだよそこ!
アプリ名って書いてあるところを修正。これ、Django側のアプリ名なのかHeroku側のアプリ名なのか分かんねえんだけど、たぶんDjango側だからDjango側のApp名を入れた。
(後述しますが、正解はDjangoのプロジェクト名っぽいです)

再度デプロイ

・logsを見る
procfile等を変更したあとは、gitコマンドでpushした。李モードリポジトリの更新と共に自動的にHerokuも更新される(ここは便利だよなあ)。
しかし、openAppして俺のAppが表示されるか見てみると、先ほどと同じApplication errorの画面が。
よく見てみるとログを見ろとあるので、ログを見てみる。

$ heroku logs

すると、

 ›   Error: Missing required flag:
 ›     -a, --app APP  app to run command against
 ›   See more help with --help

こんなの。分からんのでググる

・Missing required flag:
このページの一番下に似たような事例がある。
今更ながら Ruby on Rails Tutorial をやってみた (その2)

$ heroku apps

する。するとアプリ名が出てくるんだが、それがHeroku側のアプリ名だった。procfileに記載したのはDjango側だったので、ここの指定が上手くいってないのかなあ? と考える。

・procfileの修正(再度)
procfileをHeroku側のApp名にして、再度デプロイ。そんでログを見てみる。

 ›   Error: Missing required flag:
 ›     -a, --app APP  app to run command against
 ›   See more help with --help

うーん、お変わりない様子で。。

・HerokuAppのステータス確認

$ heroku ps -a APP_NAME

でステータスが確認できるのでやってみる。
すると、

Free dyno hours quota remaining this month: 550h 0m (100%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

No dynos on ⬢ Heroku側のApp名

dynoっていうのはHerokuのサーバ?だ。それがあと550時間使えるよ、って言われてる。いいじゃない。
なんだか、ステータスってのはこういう、あと何時間使えますとかのステータスであって、エラーとかではないみたい。

詰まる

詰まってたんですが、procfileに書くアプリ名がwsgi.pyの親フォルダ名と判明。
(優しい人が教えてくれた・再)


同時に、wigs.pyファイルの中身もチェックした。思いっきり「アプリ名」って日本語がコードに混じっていたので、そこも修正。
しかし、依然としてエラーの内容は変わらず。。

諦めた

諦めました!!!
とりあえず開発環境もめっちゃくちゃになっちゃったので、最初からDjangoのPRJを立ち上げ直して、コードはコピペで修復しました。
思うに今回の敗因は、

  1. settings.py, wsgi.pyなど理解しきっていないところをいじりすぎた
  2. gitのignoreファイルを最初作っていなかった

かなあと思います。またチャレンジして、上手くいったら記事にします。俺はこれからセブンのデッケエプリンを食べる!!!

再々リプ

procfile ⇨ Procfile

手取り足取り教えてくれてたのこのこさんがリポジトリを見てくれた。神か。



やってみたところ、今度は500エラーに。

Error: Missing required flag:の解消

 ›   Error: Missing required flag:
 ›     -a, --app APP  app to run command against
 ›   See more help with --help

ってのがずっと出ていたが、色々調べ回るうちに、環境変数を指定することで回避できると判明。

$ heroku logs -a app名

これでログが見えるように。

ログの表示

f:id:MaximoNelson49:20180622193500p:plain
ログを見た結果。初めて見たからすげえ面喰らった。3時間くらいここに表示されてるエラーの内容について、エラー出てるけどまあいいか...って放置した。そういうの良くない!
見づらいが、

django.db.utils.ProgrammingError: relation "dekita_todolist" does not exist

というエラーが出ている。ググると次のページが出た。
Djangoの初回マイグレーション時に relation "auth_user" does not exist というエラーが発生する場合 - Yura YuLife

heroku run python manage.py migrate

マイグレートしてないからじゃね? ということで実施。
(ちな、heroku openを一度してからじゃないと以下のコマンドが使えなかった。俺は)

heroku run python manage.py migrate -a app名

んでまたheroku open。そしたらできた。

https://twitter.com/subwaypkpk/status/1010048791498506241





最終的にこんなんなった

f:id:MaximoNelson49:20180723081240p:plain

ほとんど完成画面


以上!!!