【同日追記】
Django Girls Tutorial 日本語最新版にて、
- Python 3.6
- Django 2.0.6
- Python Anywhereにデプロイ
のバージョンが公開されてます!
素直にこちらに従っといたほうが良いですが、このページは不幸にも旧バージョンである程度進めてしまった方に向けてと備忘録として残しときます。
【以下、本文】
恐らく、指示されたバージョンにそってちゃんと環境を構築すれば良いのですが、そこらへんが面倒 + 好奇心で少し無視してみました
投稿日(2018/10/5)時点で構築できる(最新じゃないけど)新しめの環境でDjango Girls Tutorialsをドメイン登録以外こなしたので、振り返りつつ自分の詰まった・気になったポイント(主にバージョン関係)と解消法を紹介できればと。
これから書く中でおかしな点がありましたらご指摘お願いします。
既に紹介は色んな場所でされているので、詳細については以下の記事に任せます。
実行環境以下は各見出しがDjango Girlsの見出しと対応してます。
実行環境
- OS : Windows10
- CLI : Powershell 5.1.17
- Editor : VSCode
- Python 3.6.6
- pip 18.0
- Django 2.1.2
その他ライブラリは指示に従ったものを導入しています。
Deploy!
The requirements.txt file
Herokuにデプロイしようとしてgit push heroku master
したらビルド中に以下のエラーが。
.
.
.
Collecting psycopg2==2.5.4 (from -r /tmp/build_f3b8609b116a064ade6ac5536d30aee6/requirements.txt (line 6))
Downloading https://files.pythonhosted.org/packages/63/c3/802668cb3cfc2880c2a8364623e7105a0257724a2612bb66ec733aaddb8c/psycopg2-2.5.4.tar.gz (682kB)
Complete output from command python setup.py egg_info:
running egg_info
creating pip-egg-info/psycopg2.egg-info
writing pip-egg-info/psycopg2.egg-info/PKG-INFO
writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'
Error: could not determine PostgreSQL version from '10.5'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-m3z9bw2m/psycopg2/
! Push rejected, failed to compile Python app.
! Push failed
これに関しては既に先人がいて、この記事を参考に psycopg2 を 2.7.5 にアップグレードしてpushし直したら動きました。
$ pip install --upgrade psycopg2
$ pip freeze > requirements.txt
$ git add -A .
$ git commit -m "upgrade psycopg2"
$ git push heroku master
ただ、エラーでビルドは止まらなくなったのですが、ログで以下のWarningが出てきます。
(以下、見やすいように改行)
UserWarning:
The psycopg2 wheel package will be renamed from release 2.8;
in order to keep installing from binary please use "pip install psycopg2-binary" instead.
For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
これに関しては、「2.8のバージョンからpsycopg2のwheelパッケージがpsycopg2-binaryに名前が変わるから、今のうちにpip install psycopg2-binary
しとくといいよ」って意味です。
一応現時点で問題なく動くので無視しても構いませんが、別の警告文と混同するのが嫌/気になる or この記事の実行環境より新しい環境でやるであろう未来の方は最初から
$ pip install psycopg2-binary
しといたほうが無難かもしれません。
Django urls
Your first Django url!
mysite/urls.py にURLを書き込む場面ですね。Django2.0以降で進めていると、チュートリアルと実際に開いた urls.py で記述が違うと思います。具体的には
url(r'^admin/', include(admin.site.urls))
↓
path('admin/', admin.site.urls)
のようにですね。
調べたところ、チュートリアルで使用しているDjango1.0系統からDjango2.0への更新に際して、このあたりのライブラリ関係に新機能path()
が加わったりで体系が変わってます。現在、ルーティングに関しては django.urls
の使用が推奨されておりdjango.conf.urls
は後方互換のために残されてるだけのようです。
チュートリアルのままでも動きますが、このdjango.urls
とpath()
を使用した書き方は以下のようになります。
from django.urls import include, path
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
さらっと書いてますが、django.conf.urls
のinclude()
も引き継がれておりそのまま使用できます。
また、過去のurl()
の機能もre_path()
に移されており、結果
from django.urls import include, re_path
from django.contrib import admin
urlpatterns = [
re_path(r'^admin/', include(admin.site.urls)),
re_path(r'', include('blog.urls')),
]
というふうに、そのまま今のチュートリアルを引用したパスの書き方もできます。
面倒が嫌な方はこちらで良いでしょう。
CSS - make it pretty!
Your first CSS file!
Google FontsからLobsterというフォントを導入する部分ですね。
<link href="http://fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
実はこのままだとHerokuにpushしたあとのページでフォントが適用されません。
詳しくはこちらのページで書いてありますが、ざっくりいうとセキュリティ上の問題ですね。
HerokuはHTTPSで表示されてるので、引っ張ってくるもののリンクもちゃんとhttps://で始まるリンクに揃えてあげる必要があります。なので
<link href="https://fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
このようにlink=""
の中身をhttps://から始まるものにします。
また、もっと省略してHTTPとHTTPS双方で使えるようにする事ができます。
<link href="//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
覚えておくと便利です。
実際にやってみての感想
詳しくは後ほど別記事で書く予定ですが、Flaskで小規模なWebアプリケーションの作成をしたことがあったので、上記を調べたり深掘りしちゃったり以外は時間的にも結構サクサクいけました。
ただ、全くプログラミングやったこと無い方があの内容全てを呪文と思わずに飲み込むには、だいぶ濃い内容だと思いました。
もしやるとしたらTwitterでもどこでも良いので聞ける人に寄り添ってもらってから取り掛かるか、存分にググりスキルを駆使しながらじっくり取り組むことをオススメします。
やっぱりこうしてなにかモノができるチュートリアルは面白いです。作成した方々に感謝!