このサイトですが、実は開発を開始した 2016 年 4 月頃から Django のバージョンアップをしていませんでした。
2016 年 5 月 30 日にリリースして以降、 Django のバージョンはどんどん上がり
ついにはメジャーバージョンアップまで果たされてしまいました 😗
2 系になってからは管理サイトの UI も意識高い系になっているようだし、さすがにまずいと
思ったので意を決してアップグレードしました 👍
落とし穴にひとつひとつはまっていったのでエラーログとともにオペレーションの記録を公開します(恥さらし 🙈
pip のアップグレード
$ pip install --upgrade pip
Collecting pip
Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 661kB/s
Installing collected packages: pip
Found existing installation: pip 9.0.1
Uninstalling pip-9.0.1:
Successfully uninstalled pip-9.0.1
Successfully installed pip-18.1
django のアップグレード
$ pip install --upgrade django
Collecting django
Downloading https://files.pythonhosted.org/packages/fd/9a/0c028ea0fe4f5803dda1a7afabeed958d0c8b79b0fe762ffbf728db3b90d/Django-2.1.4-py3-none-any.whl (7.3MB)
100% |████████████████████████████████| 7.3MB 2.5MB/s
Requirement already satisfied, skipping upgrade: pytz in /home/photo/.pyenv/versions/3.5.1/lib/python3.5/site-packages (from django) (2017.3)
Installing collected packages: django
Found existing installation: Django 1.8
Uninstalling Django-1.8:
Successfully uninstalled Django-1.8
Successfully installed django-2.1.4
django-rest-framework のアップグレード
$ pip install --upgrade djangorestframework
Collecting djangorestframework
Downloading https://files.pythonhosted.org/packages/99/0b/d37a5a96c5d301e23adcabcc2f3fa659fb34e6308590f95ebb50cdbe98a1/djangorestframework-3.9.0-py2.py3-none-any.whl (924kB)
100% |████████████████████████████████| 931kB 7.4MB/s
Installing collected packages: djangorestframework
Found existing installation: djangorestframework 3.5.3
Uninstalling djangorestframework-3.5.3:
Successfully uninstalled djangorestframework-3.5.3
Successfully installed djangorestframework-3.9.0
django-debug-toolbar のアップグレード
$ pip install --upgrade django-debug-toolbar
Collecting django-debug-toolbar
Downloading https://files.pythonhosted.org/packages/01/9a/3db232bd15882d90d3c53de1f34ce0a522327849593c9198899713267cfe/django_debug_toolbar-1.11-py2.py3-none-any.whl (201kB)
100% |████████████████████████████████| 204kB 9.6MB/s
Requirement already satisfied, skipping upgrade: sqlparse>=0.2.0 in /home/photo/.pyenv/versions/3.5.1/lib/python3.5/site-packages (from django-debug-toolbar) (0.2.4)
Requirement already satisfied, skipping upgrade: Django>=1.11 in /home/photo/.pyenv/versions/3.5.1/lib/python3.5/site-packages (from django-debug-toolbar) (2.1.4)
Requirement already satisfied, skipping upgrade: pytz in /home/photo/.pyenv/versions/3.5.1/lib/python3.5/site-packages (from Django>=1.11->django-debug-toolbar) (2017.3)
Installing collected packages: django-debug-toolbar
Found existing installation: django-debug-toolbar 1.9.1
Uninstalling django-debug-toolbar-1.9.1:
Successfully uninstalled django-debug-toolbar-1.9.1
Successfully installed django-debug-toolbar-1.11
reverse
# Django 1.8
from django.core.urlresolvers import reverse
# Django 2.1
from django.urls import reverse
admin の include を外す
# Django 1.8
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
]
# Django 2.1
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
Django の on_delete
外部キーを指定してる箇所に on_delete 属性が必須になったようです。
TypeError: __init__() missing 1 required positional argument: 'on_delete'
プロジェクトの models.py と実行済みの migration ファイルの両方を変更する必要があります。( migrations の方は忘れがち😅)
参考: Django2.0から必須になったon_deleteの使い方
参考: Is it correct to modify old migration files in Django?
migration を実行する
$ ./manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, sites
Running migrations:
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying sites.0002_alter_domain_unique... OK
middleware の設定
MIDDLEWARE_CLASSES が MIDDLEWARE に変更し、 'django.contrib.auth.middleware.SessionAuthenticationMiddleware' を削除します。
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'htmlmin.middleware.HtmlMinifyMiddleware',
'htmlmin.middleware.MarkRequestMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
)
が、 MIDDLEWARE まわりでエラーが出る
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:ERRORS:
?: debug_toolbar.middleware.DebugToolbarMiddleware is missing from MIDDLEWARE.
HINT: Add debug_toolbar.middleware.DebugToolbarMiddleware to MIDDLEWARE.
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'htmlmin.middleware.HtmlMinifyMiddleware',
'htmlmin.middleware.MarkRequestMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
参考: django-debug-toolbar の導入手順メモ
module 'django.utils.translation.trans_real' has no attribute 'templatize'
Incompatibility with Django 1.11
Use pypugjs instead!
はい…PyPugJS なるものを使います。(ていうか PyJade の完璧な後継ですが。)
↓ github はこちら
https://github.com/kakulukia/pypugjs
というわけで pypugjs をインストールする
$ pip install --upgrade pypugjs
Collecting pypugjs
Downloading https://files.pythonhosted.org/packages/ce/b9/38ce119d4b143d46713eb0138dd5fcb8723082420dc56b200accc6224065/pypugjs-5.7.2-py2.py3-none-any.whl
Requirement already satisfied, skipping upgrade: six in /home/photo/.pyenv/versions/3.5.1/lib/python3.5/site-packages (from pypugjs) (1.10.0)
Collecting chardet (from pypugjs)
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
100% |████████████████████████████████| 143kB 10.2MB/s
Installing collected packages: chardet, pypugjs
Successfully installed chardet-3.0.4 pypugjs-5.7.2
$ ./manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings:
/path/to/project/static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
169 static files copied to '/path/to/project/static', 47 unmodified.
django.db.utils.NotSupportedError: URIs not supported
Django 2.1 は SQLite version 3.7.15 以上しかサポートしない
参考: SQLite notes
まさかと思ってバージョンをチェックすると、無情にも 3.6.20 でした 😇
$ sqlite3 --version
3.6.20
CentOS 6 に SQLite 3.7.15 以上をインストールする
CentOS あるあるですが、パッケージのアップグレードが亀です🐢
なので先の 3.6.20 が最新だと言われてしまったので、リポジトリを追加してインストールすることにしました。
$ cd /usr/local/src
$ sudo wget https://forensics.cert.org/cert-forensics-tools-release-el6.rpm
--2019-01-01 17:01:20-- https://forensics.cert.org/cert-forensics-tools-release-el6.rpm
forensics.cert.org をDNSに問いあわせています... 192.88.209.7
forensics.cert.org|192.88.209.7|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 11964 (12K) [application/x-rpm]
`cert-forensics-tools-release-el6.rpm' に保存中
100%[======================================================================================================================>] 11,964 --.-K/s 時間 0s
2019-01-01 17:01:22 (108 MB/s) - `cert-forensics-tools-release-el6.rpm' へ保存完了 [11964/11964]
$ sudo rpm -Uvh cert-forensics-tools-release*rpm
警告: cert-forensics-tools-release-el6.rpm: ヘッダ V4 RSA/SHA1 Signature, key ID 87e360b8: NOKEY
準備中... ########################################### [100%]
1:cert-forensics-tools-re########################################### [100%]
$ sudo yum --enablerepo=forensics install sqlite
読み込んだプラグイン:fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.riken.jp
* extras: ftp.iij.ad.jp
* remi-safe: ftp.riken.jp
* updates: ftp.iij.ad.jp
forensics | 2.9 kB 00:00
forensics/primary_db | 923 kB 00:01
forensics-splunk | 2.9 kB 00:00
forensics-splunk/primary_db | 14 kB 00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package sqlite.x86_64 0:3.6.20-1.el6_7.2 will be 更新
--> 依存性の処理をしています: sqlite = 3.6.20-1.el6_7.2 のパッケージ: sqlite-devel-3.6.20-1.el6_7.2.x86_64
---> Package sqlite.x86_64 0:3.7.17-4.el6 will be an update
--> トランザクションの確認を実行しています。
---> Package sqlite-devel.x86_64 0:3.6.20-1.el6_7.2 will be 更新
---> Package sqlite-devel.x86_64 0:3.7.17-4.el6 will be an update
--> 依存性解決を終了しました。
依存性を解決しました
================================================================================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
================================================================================================================================================================
更新:
sqlite x86_64 3.7.17-4.el6 forensics 373 k
依存性関連での更新をします。:
sqlite-devel x86_64 3.7.17-4.el6 forensics 104 k
トランザクションの要約
================================================================================================================================================================
アップグレード 2 パッケージ
総ダウンロード容量: 477 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
(1/2): sqlite-3.7.17-4.el6.x86_64.rpm | 373 kB 00:00
(2/2): sqlite-devel-3.7.17-4.el6.x86_64.rpm | 104 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 10 kB/s | 477 kB 00:47
警告: rpmts_HdrFromFdno: ヘッダ V4 RSA/SHA1 Signature, key ID 87e360b8: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cert-forensics-2018-04-07
Importing GPG key 0x87E360B8:
Userid : CERT Forensics Operations and Investivations Team <forensics@cert.org>
Package: cert-forensics-tools-release-6-13.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-cert-forensics-2018-04-07
これでいいですか? [y/N]y
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
警告: RPMDB は yum 以外で変更されました。
更新 : sqlite-3.7.17-4.el6.x86_64 1/4
更新 : sqlite-devel-3.7.17-4.el6.x86_64 2/4
整理中 : sqlite-devel-3.6.20-1.el6_7.2.x86_64 3/4
整理中 : sqlite-3.6.20-1.el6_7.2.x86_64 4/4
Verifying : sqlite-3.7.17-4.el6.x86_64 1/4
Verifying : sqlite-devel-3.7.17-4.el6.x86_64 2/4
Verifying : sqlite-devel-3.6.20-1.el6_7.2.x86_64 3/4
Verifying : sqlite-3.6.20-1.el6_7.2.x86_64 4/4
更新:
sqlite.x86_64 0:3.7.17-4.el6
依存性を更新しました:
sqlite-devel.x86_64 0:3.7.17-4.el6
完了しました!
$ sqlite3 --version
3.7.17 2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
migrate する
$ ./manage.py migrate
Operations to perform:
Apply all migrations: admin, app, auth, contenttypes, sessions
Running migrations:
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
以上でうまくいきました。
新しい記事へ
[Windows] PIXTA クリエイター向けの ZIP 圧縮スクリプトを勢いで作ったメモ(Adobe Stock にも対応!)
mac に pip をインストールする
mac は標準で python が入っていますが、パッケージ管理の pip がインストールされていないので入れてみました。
2017/05/26 09:00
[GAS] Google Drive の特定フォルダ配下のフォルダ・ファイルの権限を一括で移譲する
Google Drive の特定フォルダ配下のファイル・フォルダの権限を一括で移譲するツールを Google Apps Script で作りました。
2018/11/10 15:54
[Windows] Ophcrack を使ってユーザーパスワードを解析する方法
家族で使っていた Windows7 のログインパスワードを忘れたため、Ophcrack を使って解析したときの記録です。
2017/09/30 21:00
[shell] フォルダ内にある大量の ZIP ファイルをまとめて解凍する
とある ZIP を解凍すると中に大量の ZIP が居たときに幸せになれるコマンドを紹介します
2018/06/19 23:45
[MySQL] データファイルから DB を復元する
先日 MySQL が再起動できなくなる問題が発生し、急遽データファイル(.frm, .ibd)から復元しました
2018/11/25 12:44