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 %}

サクッと問題は解決!

以上で修正は終了

というわけで、以上の 3つの修正でアプリケーションはまた動くようになった!
(Admin の media パスは修正しなくてもアプリケーションは動いてたけど。)


けど、ワーニングを残してるからまた近いうちに困ることになるんだろうな…。