頭の中は異空間

ものづくり中心

【Django】MacでCommunity版PyCharmでDjango環境を触れるようにする + herokuにデプロイまで

Herokuを始めるとき、getting-statedでなく、自分の手元のDjangoプロジェクトをherokuにデプロイすることもできます(むしろこっちが普通かも)

pythonにはPyCharmという便利なSDKがあるので、使えるようにしたいところ。

 

Community版PyCharmではDjangoプロジェクト作成が出来ないので、PyCharmでは予め作ったDjangoプロジェクトを読み込むだけとしましょう。

 

 

PyCharmのインストール

あえて解説するまでもないので詳細は割愛します。

 

Djangoプロジェクトの作成

インストールが終わったら、下記コマンドを実行してDjangoのプロジェクトを作成しましょう。

cd ~/PycharmProjects
# まだなにもない
ls
# プロジェクト作成。ここでは「myMenu」とします。
django-admin startproject myMenu
# 生成物を確認
ls

ここまでで最低限のモノが揃いましたので、PyCharmで開きます。

f:id:notwo:20180520133704p:plain

開くとこんな感じ

ここからエディタをPyCharmとして実装を進めて行きます。

念のため、一応ローカルサーバが立ち上がることを確認します。

f:id:notwo:20180520133359p:plain

こんな画面が出れば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が出てくるので開いてみましょう。

f:id:notwo:20180602205033p:plain
f:id:notwo:20180602205048p:plain

こんな画面が出れば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にアクセスすると

 

f:id:notwo:20180605015519p:plain

無事に設定が終わったことがわかります。

 

今までの手順に異常があると、URLアクセス時に

f:id:notwo:20180603153225p:plain

となります。

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してから行うこと!