Django1.3.1を1.5.1にしたらいくつか設定やアプリに修正が必要だった
サーバの Django を 1.3.1 から 1.5.1 にアップデートしたら、幾つか修正しないとアプリケーションが動かなくなったのでメモ。
やっぱり一度動き始めた環境はなるべく変えたくないな〜
1.3.1 から 1.5.1 へのアップデート
ドキュメント通りに。
自分のシステムは pip でインストールしてあるのでお任せ。
[paraches@localhost ~]$ sudo pip uninstall django Uninstalling Django: /usr/local/bin/django-admin.py /usr/local/lib/python2.7/site-packages/Django-1.3.1-py2.7.egg-info /usr/local/lib/python2.7/site-packages/django Proceed (y/n)? y Successfully uninstalled Django [paraches@localhost ~]$
新しいバージョンのインストールもお任せ。
[paraches@localhost site-packages]$ sudo pip install django Downloading/unpacking django Downloading Django-1.5.1.tar.gz (8.0Mb): 8.0Mb downloaded Running setup.py egg_info for package django <省略> Successfully installed django Cleaning up... [paraches@localhost ~]$
確認してみる。
[paraches@localhost ~]$ python Python 2.7.2 (default, Mar 21 2012, 03:20:49) [GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import django >>> django.VERSION (1, 5, 1, 'final', 0) >>>
Django 1.5.1 が無事にインストールされた!
まずは Csrf のミドルウェアは CsrfViewMiddleware だけで良い
とりあえず runserver して確認してみるとこんなエラーが出る。
Traceback (most recent call last): File "/usr/local/lib/python2.7/wsgiref/handlers.py", line 85, in run self.result = application(self.environ, self.start_response) File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 72, in __call__ return self.application(environ, start_response) File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 236, in __call__ self.load_middleware() File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 57, in load_middleware raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname)) ImproperlyConfigured: Middleware module "django.middleware.csrf" does not define a "CsrfResponseMiddleware" class
で、ドキュメントにはこんな話が。
自分の setting.py には 2行入ってるぞ…。
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware',
というわけで、CsrfResponseMiddleware を削除して問題解決。
mail_admins が Deprecatedってワーニング
runserver した時にこんなワーニングも出てた。
/usr/local/lib/python2.7/site-packages/django/conf/__init__.py:221: DeprecationWarning: You have no filters defined on the 'mail_admins' logging handler: adding implicit debug-false-only filter. See http://docs.djangoproject.com/en/dev/releases/1.4/#request-exceptions-are-now-always-logged DeprecationWarning)
これはそのまま放置。
また次のバージョンで泣くことになりそうだけど…。
次に Admin の media パスが通ってない
Django 管理サイトへのログイン画面がこんな感じで css が読み込めてない。
というわけでパスを確認してみると 1.5.1 ではこんな状態。(mediaってなくなってる!!!)
/usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin
これは nginx.conf の /static/admin の alias を修正。
こんな感じ。
location /static/admin { alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin; }
これで今まで通りに動くようになった。
テンプレートで「'url' requires a non-empty first argument.」エラー
Django 1.5 からの仕様変更だそうだ。
で、どう修正するかはこんな感じ。
基本的に最初の変数をクォートで囲めば良い。
{% url result mapitem_id=mapitem.id %}
これはこんな感じに。
{% url 'result' mapitem_id=mapitem.id %}
サクッと問題は解決!