何があったか?
Djangoで作成したWebアプリをherokuでデプロイするため
$ git push heroku master
を実行したところ、以下のエラーが発生した。
"""中略"""
remote:
To https://git.heroku.com/hogehoge.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/hogehoge.git'
原因は?
急いでいる人向けに結論から書きます。
Procfile、runtime.txt、requirements.txtを作成していませんでした。
慣れている人からすれば「そんな事ある?」って話でしょうが、あります(泣)
なんなら設置場所を間違えて二重に詰まっていました。
なぜエラーになるのか
それぞれのファイルの役割と作成方法を説明します。
Procfile
役割 : 使用するサーバーをherokuに知らせる
場所 : プロジェクトルート(manage.pyがあるところ)に設置する
内容 : 以下のように記述
web: gunicorn プロジェクト名.wsgi --log-file -
gunicornを使いますよ、という意味
Procfileには拡張子がないので注意!
runtime.txt
役割 : Pythonのバージョンをherokuに知らせる
場所 : プロジェクトルート(manage.pyがあるところ)に設置する
内容 : 以下のように記述
python-3.8.5 (3.8.5には自分が使用しているpythonバージョンを記述する)
requirements.txt
役割 : 使用しているライブラリをherokuに知らせる
場所 : プロジェクトルート(manage.pyがあるところ)に設置する
内容 : Procfileとruntime.txtは手動で作成する必要がありますが、requirements.txtはターミナルで以下を実行します。
$ cd プロジェクトルートディレクトリ # プロジェクトルートディレクトリ内で実行すること
$ pip freeze > requirements.txt
これだけでOK。以下の例のようにライブラリ一覧が書かれたテキストファイルができていることを確認する。
"""
これは例なので実際は自分が使用しているライブラリが一覧で書かれます。
"""
appnope==0.1.0
asgiref==3.2.10
backcall==0.2.0
beautifulsoup4==4.9.1
certifi==2020.6.20
chardet==3.0.4
click==7.1.2
coverage==5.2.1
cssselect==1.1.0
decorator==4.4.2
dj-database-url==0.5.0
Django==3.1
.
.
.
"""以下略"""
注意点
上記3ファイルは設置していないのはもちろん、ファイル名や内容にミスがあってもエラーとなるのでよく確認しましょう。
参考
参考にさせていただいたサイト
Djangoで作る初めてのウェブアプリケーション(番外編)herokuデプロイ
同じ状況の人に参考になるかもしれないサイト
【git】git pushがrejectされたときの対応方法