最近、仕事プログラミングばかりで気力が損なわれていたので、ちょっと変更してすぐに公開できるウェブアプリを開発したさありました。
iOSアプリは開発に時間がかかるのに2本連続リジェクトくらったので、なんだかやる気が損なわれたので、しばらくプライベートでの開発はしないかな……
Pythonでウェブアプリを作れるんだろうか?
ふと、pythonを使ったウェブアプリって開発できるのかな?と思いました。
pythonでウェブアプリ作れるんかなぁ (自分の技量的な意味で
— さくさん (@ch3cooh) 2018年6月2日
フレームワークはあるんだろうけど、あまり界隈に興味がないので今まで調べてきませんでした。pythonを使うのであれば、Djangoというフレームワークがよく使われているようです。
イントロダクション · workshop_tutorialJP
Djangoのチュートリアルが日本語訳されています。
djangoのチュートリアルよくできてるなぁ。heroku へのデプロイで詰まったけど、感触をつかむのに役に立ってる
— さくさん (@ch3cooh) 2018年6月2日
これを読むとDjangoを使ったウェブアプリの開発を一通り試すことができて、感触を掴むのにぴったりでした。
Herokuへのデプロイを試みる
heroku createで5分くらい待ってるけどなかなか終わる気配がない
— さくさん (@ch3cooh) 2018年6月2日
チュートリアルに書いている通りheroku create djangogirlsblog
をしたら、5分ほど待機させられて最終的にエラーになった。おそらく何度か作成できるかリトライしていたのだと思う。
$ heroku create djangogirlsblog Creating ⬢ djangogirlsblog... ! ▸ Name is already taken
heroku create djangogirlsblog393
でやったら一瞬で完了した。Herokuでのアプリケーション名は一意で同じ名前が被るとダメなことを知った。
heroku createでめっちゃ時間がかかっていた件、最終的にタイムアウトして Name is already taken って表示された。名前が被ってたらリトライし続ける感じなのかも。適当な名前でやったら一瞬で終わった
— さくさん (@ch3cooh) 2018年6月2日
Herokuへのgit pushに失敗する
git push heroku master
するだけでHerokuにデプロイできるようなのですが、何かエラーが発生して失敗してしまっているようです。
git push heroku masterしても何かがおかしくて失敗してる
— さくさん (@ch3cooh) 2018年6月2日
エラーひとつ目。
remote: -----> Python app detected remote: ! The latest version of Python 3 is python-3.6.5 (you are using python-3.5.2, which is unsupported). remote: ! We recommend upgrading by specifying the latest version (python-3.6.5).
「デプロイ! · workshop_tutorialJP」に書かれているruntime.txtの内容が古かったのが原因でした。Herokuは古いバージョンのランタイムには対応していないことが理解できました。
---python-3.5.2 +++python-3.6.5
エラーふたつ目。
remote: Complete output from command python setup.py egg_info: remote: running egg_info remote: creating pip-egg-info/psycopg2.egg-info remote: writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt remote: writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt remote: writing pip-egg-info/psycopg2.egg-info/PKG-INFO remote: writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt' remote: Error: could not determine PostgreSQL version from '10.4'
これも同じくチュートリアルに書かれている内容が古かったのが原因でした。
requirements.txtにはpsycopg2==2.5.4
を追加するように書かれていますが、psycopg2==2.7.3.1
を指定する必要がありました。
---psycopg2==2.5.4 +++psycopg2==2.7.3.1
以上を修正することでgit push heroku master
に成功することが確認できました。
デプロイしたページが見えない
せっかくデプロイしたというのにエラーページしか表示されない。
これもチュートリアルの一環でわざとエラーが出るようになっているようです。
Djangoを使う上でのコマンド集
Djangoを使うのであれば、仮想環境で作業するのが推奨されているようです。以下の方法で仮想環境に入ることができます。
python3 -m venv myvenv
source myvenv/bin/activate
djangoで作ったアプリを実行するためには以下のコマンドを実行します。
python manage.py runserver