mezzanine 4.2.0 から 4.2.2 にupdateした話


mezzanine が 2016/09/25 に4.2.2version upしたので、
当ブログのmezzanine4.2.0から4.2.2update してみました。

実施したことを備忘として残します。

0. 前提

以下の環境で実行しています。

  • OS
    CentOS release 6.7 (Final)

  • Python Version
    Python 2.7.8

  • Package (必要そうなものだけ抜粋)
    Django (1.10)
    Mezzanine (4.2.0)


1. UPGRADE

現状Versionの確認

  • UPGRADE 前の pip list
    [0.]の内容とも重複しますが、UPGRADE前の構成情報になります。
pip list
------------------------------------
beautifulsoup4 (4.5.1)
bleach (1.4.3)
chardet (2.3.0)
Django (1.10)
django-appconf (1.0.2)
django-compressor (2.0)
django-contrib-comments (1.7.2)
django-crontab (0.7.1)
django-grappelli (2.8.1)
django-htmlmin (0.9.1)
django-request (1.4.0)
django-robots (2.0)
django-sites (0.9)
filebrowser-safe (0.4.3)
funcsigs (1.0.2)
future (0.15.2)
grappelli-safe (0.4.2)
html5lib (0.9999999)
importlib (1.0.3)
Markdown (2.6.6)
Mezzanine (4.2.0)
mezzanine-pagedown (1.0)
mezzanine-pubsubhubbub-pub (0.0.3)
mock (2.0.0)
oauthlib (1.1.2)
pbr (1.10.0)
Pillow (3.3.0)
pip (8.1.2)
psycopg2 (2.6.1)
Pygments (2.0.2)
pytz (2016.6.1)
rcssmin (1.0.6)
requests (2.11.0)
requests-oauthlib (0.6.2)
rjsmin (1.0.12)
setuptools (25.2.0)
six (1.10.0)
tzlocal (1.2.2)
wheel (0.26.0)

UPGRADE

pip install Mezzanine -U
-----------------------------------
Successfully installed
Mezzanine-4.2.2
django-1.10.2
django-contrib-comments-1.7.3
filebrowser-safe-0.4.6
grappelli-safe-0.4.5
oauthlib-2.0.0
pillow-3.4.1
pytz-2016.7
requests-2.11.1
requests-oauthlib-0.7.0
-----------------------------------

2. check コマンドによる確認

python2.7 manage.py check
-----------------------------------
System check identified no issues (0 silenced).
-----------------------------------

特に問題なさそうなので、サーバーを再起動してみます。


3. サーバー 起動後の確認

service httpd restart

サーバー起動後にサイトにアクセスすると、Internal Server Errorが発生しました。
Djnago に 処理シーケンスが呼ばれる前に落ちているようで、特にエラーメールも飛んできません。
Apacheのエラーログを確認したところ以下のエラーが出力されていました。

 mod_wsgi (pid=342): Exception occurred processing WSGI script 'projectname/wsgi.py'.
 Traceback (most recent call last):
   File "projectname/wsgi.py", line 22, in 
     application = get_wsgi_application()
   File "/usr/local/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
     return WSGIHandler()
   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 153, in __init__
     self.load_middleware()
   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 58, in load_middleware
     mw_instance = mw_class()
 TypeError: __init__() takes exactly 2 arguments (1 given)

エラー発生箇所が、mw_class() なのでミドルウェアの初期化処理(取得処理) で落ちているようですが、
原因はWEBで調べてもよくわからず、MezzanineのChanglogでMiddleware関連の変更を確認すると、
Version 4.2.1 で以下の変更があったので、

  • 変更点1
    >Add some MIDDLEWARE compatibility fixes that were missing from #1660.
    >Also change the way in which the middleware setting is determined.
    >A statis variable will fail when settings are modified on the fly, e.g., when running tests - Samir Shah

  • 変更点2
    >Deprecate SSLRedirectMiddleware. Resolve #1600.
    >Also, set default SSL settings to editable=False so they do not. display in the settings by default - ryneeverett

生成しなおした、settings.py の Middleware設定と現在使用中の、settings.py を比較、
差分を取り込んだところ、サイト表示ができるようになりました。
以下、差分取り込み後の、settings.py の MIDDLEWARE_CLASSES 記述になります。

  • settings.py

    MIDDLEWARE_CLASSES = (
        "mezzanine.core.middleware.UpdateCacheMiddleware",
        "django.contrib.sessions.middleware.SessionMiddleware",
        "django.middleware.locale.LocaleMiddleware",
        "django.contrib.auth.middleware.AuthenticationMiddleware",
        "django.middleware.common.CommonMiddleware",
        # ADD SessionAuthenticationMiddleware
        'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
        "django.middleware.csrf.CsrfViewMiddleware",
        "django.contrib.messages.middleware.MessageMiddleware",
        # ADD XFrameOptionsMiddleware
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
        "mezzanine.core.request.CurrentRequestMiddleware",
        "mezzanine.core.middleware.RedirectFallbackMiddleware",
        "mezzanine.core.middleware.TemplateForDeviceMiddleware",
        "mezzanine.core.middleware.TemplateForHostMiddleware",
        "mezzanine.core.middleware.AdminLoginInterfaceSelectorMiddleware",
        "mezzanine.core.middleware.SitePermissionMiddleware",
        # Uncomment the following if using any of the SSL settings:
        # DEL "mezzanine.core.middleware.SSLRedirectMiddleware",
        "mezzanine.pages.middleware.PageMiddleware",
        "mezzanine.core.middleware.FetchFromCacheMiddleware",
    )
    

  • SessionAuthenticationMiddleware を 追加
    これは、あまり役割もわからずに追加しています。
    djnago 2.0.0 で削除される予定のようです。

  • XFrameOptionsMiddleware を 追加
    Djangoでクリックジャッキング対策をするためのモジュールです。
    デフォルトで、X-Frame-Options SAMEORIGIN を追加してくれます。

  • SSLRedirectMiddleware を 削除
    Deprecate SSLRedirectMiddleware · Issue #1600 · stephenmcd/mezzanine
    に記載されていますが、Djnago 1.8 から SecurityMiddleware が追加されたため、
    機能が被り、非推奨となったようです。このため、settings.py を生成し直すと削除されます。

根本原因はちょっと不明ですが、
MIDDLEWARE_CLASSES の修正 のみでサイト立ち上げまではうまくいきました。

以上です。

コメント