Herokuを始めるとき、getting-statedでなく、自分の手元のDjangoプロジェクトをherokuにデプロイすることもできます(むしろこっちが普通かも)
pythonにはPyCharmという便利なSDKがあるので、使えるようにしたいところ。
Community版PyCharmではDjangoプロジェクト作成が出来ないので、PyCharmでは予め作ったDjangoプロジェクトを読み込むだけとしましょう。
PyCharmのインストール
あえて解説するまでもないので詳細は割愛します。
インストールが終わったら、下記コマンドを実行してDjangoのプロジェクトを作成しましょう。
cd ~/PycharmProjects
# まだなにもない
ls
# プロジェクト作成。ここでは「myMenu」とします。
django-admin startproject myMenu
# 生成物を確認
ls
ここまでで最低限のモノが揃いましたので、PyCharmで開きます。
開くとこんな感じ
ここからエディタをPyCharmとして実装を進めて行きます。
念のため、一応ローカルサーバが立ち上がることを確認します。
こんな画面が出ればOK
herokuへデプロイ
以下コマンドでherokuデプロイ用のローカルgitリポジトリを作成~デプロイまでを行います。
cd myMenu
git init
git add ./
git commit
heroku create アプリ名※
※Name must start with a letter and can only contain lowercase letters
ここでは「testpythonmenu」としました。
作成するとurlが出てくるので開いてみましょう。
こんな画面が出ればOK(.comの方)
現時点で
git push heroku master
をしても正しく動きません。rejectされるので、pushする前に必要な作業を済ませます。具体的には、
This occurs when Heroku cannot detect the buildpack to use for this application automatically.
とか出るので、
elements.heroku.com
にある通りの対策をします。
その前に、
devcenter.heroku.com
に従い、Procfileをプロジェクトルートに生成します。Procfileは↑公式サイトの通りで問題ないです。
他にはgunicornというwebサーバが入ってないといけないので合わせて入れます。
gunicornのインストールにはpipenvが必要なので、
# プロジェクトルートにいることを確認
pwd
# 1つずつインストール
pip install pipenv
pipenv install gunicorn
pipenv install django-heroku
と実行していきましょう。この時点でPipfileおよびPipfile.lockが作られます。
gunicornのインストールに失敗したら、おそらく下記の通りにすればうまくいきます。
www.lifewithpython.com
install成功したら、settings.pyへの記述も忘れずに(import django_herokuの記述も必要です)!
以上を設定してcommitしたら、
heroku buildpacks:set heroku/python
として今度こそpushします。
それでも、
remote: ! Push failed: An unhandled error occurred, please try again shortly. See https://status.heroku.com/ for current Heroku platform status. If the problem persists, please contact https://help.heroku.com/ and provide Request ID fb0fb17b-ec7f-870d-28ca-7e53f9960147.
remote: ! Please try pushing again.
remote: ! If the problem persists, see http://help.heroku.com/ and provide Request ID fb0fb17b-ec7f-870d-28ca-7e53f9960147.
などという謎エラーを吐くことがありますが、こういうときは再度pushし直してください。うまくいくはずです。
これで出力されたURLにアクセスすると
無事に設定が終わったことがわかります。
今までの手順に異常があると、URLアクセス時に
となります。
heroku logsでログを見れるので、エラーメッセージをもとに修復すること。
番外編
requirements.txtがあるのにProcfileを生成してしまった
なんとrequirements.txtが同じディレクトリに残っていると、Pipfileはrequirements.txtの内容を自動で読みに行ってその内容を勝手にインポートしやがります。このせいで、その後pipenv installしたパッケージによっては依存関係がめちゃくちゃになってエラーを吐く原因になります。
こうなると解決は困難なので、一度herokuアプリからすべて消して作り直したほうが速いです。
まずないと思いますが、昔の名残でrequirements.txtが残っている場合は先に削除してからpip installするように!!
Pipfileがあってbuildpackしたのに同じエラーでpushできない!
こんなときは
Ruby on railsのtutorialをherokuに突っ込んだ時に躓いたこと
と同じ問題な可能性が高いです。pipenv installするときは必ず、プロジェクトルートディレクトリにcdしてから行うこと!