酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

はじめてPythonでウェブアプリを作るので「Django Girls Tutorial」をやってみた

最近、仕事プログラミングばかりで気力が損なわれていたので、ちょっと変更してすぐに公開できるウェブアプリを開発したさありました。

iOSアプリは開発に時間がかかるのに2本連続リジェクトくらったので、なんだかやる気が損なわれたので、しばらくプライベートでの開発はしないかな……

Pythonでウェブアプリを作れるんだろうか?

ふと、pythonを使ったウェブアプリって開発できるのかな?と思いました。

フレームワークはあるんだろうけど、あまり界隈に興味がないので今まで調べてきませんでした。pythonを使うのであれば、Djangoというフレームワークがよく使われているようです。

イントロダクション · workshop_tutorialJP

Djangoのチュートリアルが日本語訳されています。

これを読むとDjangoを使ったウェブアプリの開発を一通り試すことができて、感触を掴むのにぴったりでした。

Herokuへのデプロイを試みる

チュートリアルに書いている通りheroku create djangogirlsblogをしたら、5分ほど待機させられて最終的にエラーになった。おそらく何度か作成できるかリトライしていたのだと思う。

$ heroku create djangogirlsblog
Creating ⬢ djangogirlsblog... !
 ▸    Name is already taken

heroku create djangogirlsblog393でやったら一瞬で完了した。Herokuでのアプリケーション名は一意で同じ名前が被るとダメなことを知った。

Herokuへのgit pushに失敗する

git push heroku masterするだけでHerokuにデプロイできるようなのですが、何かエラーが発生して失敗してしまっているようです。

エラーひとつ目。

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に成功することが確認できました。

デプロイしたページが見えない

せっかくデプロイしたというのにエラーページしか表示されない。

f:id:ch3cooh393:20180602230538j:plain

これもチュートリアルの一環でわざとエラーが出るようになっているようです。

Djangoを使う上でのコマンド集

Djangoを使うのであれば、仮想環境で作業するのが推奨されているようです。以下の方法で仮想環境に入ることができます。

python3 -m venv myvenv

source myvenv/bin/activate

djangoで作ったアプリを実行するためには以下のコマンドを実行します。

python manage.py runserver