このブログは
現在 Wagtail のDjango 2.0.x, 2.1.x and 2.2.x
を"django >= 1.11, < 2.1"
を
共存でもうまく
Wagtail の
実施した
前提
以下の
OS
cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
Apache の
Version httpd -v Server version: Apache/2.4.39 (IUS) Server built: Apr 2 2019 14:11:06
Python の
Version python3.6 -V Python 3.6.7
Python の
仮装環境の 状態
使用していないため、作成から 始めます。 Apache での
Web アプリケーションの 稼働状況
複数のPython アプリケーションを mod_wsgi で 動かしています。
Python 仮装環境の 作成
venv の
Wagtail の アプリケーションの 実行環境の 作成
仮装環境の
ディレクトリを 作成 cd /var/www mkdir python-venv cd python-venv mkdir mutter cd mutter pwd /var/www/python-venv/mutter
/var/www/python-venv/mutter
という ディレクトリを 作成しました。 仮装環境作成
以下のコマンドで、 仮想環境を 作成します。 python3.6 -mvenv .venv
仮想環境の
有効化
カレントディレクトリが、/var/www/python-venv/mutter
として 以下の コマンドを 実行します。 source ./.venv/bin/activate
pip の
upgrade
仮想環境構築後、pip の version が 古いことが あります。まずpip を upgradeします。 pip install --upgrade pip Collecting pip Downloading https://files.pythonhosted.org/packages/d8/f3/413bab4ff08e1fc4828dfc59996d721917df8e8583ea85385d51125dceff/pip-19.0.3-py2.py3-none-any.whl (1.4MB) 100% |████████████████████████████████| 1.4MB 6.2MB/s Installing collected packages: pip Found existing installation: pip 10.0.1 Uninstalling pip-10.0.1: Successfully uninstalled pip-10.0.1 Successfully installed pip-19.0.3
ライブラリの
インストール
Wagtail のplugin APSL/puput: A Django blog app implemented in Wagtail を 使用して おり、 芋づるで 最新版が インストールされる ため、 puput を インストールします。 以下、pip install puput Collecting puput ... Running setup.py install for puput ... done Successfully installed puput-1.0.3
モジュールが インストールされました。 pip list pip list Package Version -------------------- -------- beautifulsoup4 4.6.0 certifi 2019.3.9 chardet 3.0.4 Django 2.1.8 django-colorful 1.3 django-el-pagination 3.2.4 django-modelcluster 4.4 django-social-share 1.3.2 django-taggit 0.23.0 django-treebeard 4.3 djangorestframework 3.9.2 draftjs-exporter 2.1.5 html5lib 1.0.1 idna 2.8 Pillow 5.4.1 pip 19.0.3 puput 1.0.3 pytz 2019.1 requests 2.21.0 setuptools 39.0.1 six 1.12.0 Unidecode 1.0.23 urllib3 1.24.2 wagtail 2.3 webencodings 0.5.1 Willow 1.1
モジュールインストールが 行われていない 実行環境の 作成
mod_wsgi の
仮装環境の
ディレクトリを 作成 cd /var/www cd python-venv mkdir empty cd empty pwd /var/www/python-venv/empty
/var/www/python-venv/empty
という ディレクトリを 作成しました。 仮装環境作成
以下のコマンドで、 仮想環境を 作成します。 python3.6 -mvenv .venv
mod_wsgi の 設定変更
activate_this.py の 作成
Virtual Environments — mod_wsgi 4.6.5 documentation を
path のactivate_this.py
とwsgi.py
から
- activate_this.py
python_home = '/var/www/python-venv/mutter/.venv' import sys import site # Calculate path to site-packages directory. python_version = '.'.join(map(str, sys.version_info[:2])) site_packages = python_home + '/lib/python%s/site-packages' % python_version site.addsitedir(site_packages) # Remember original sys.path. prev_sys_path = list(sys.path) # Add the site-packages directory. site.addsitedir(site_packages) # Reorder sys.path so new directories at the front. new_sys_path = [] for item in list(sys.path): if item not in prev_sys_path: new_sys_path.append(item) sys.path.remove(item) sys.path[:0] = new_sys_path
wsgi.py の 修正
wsgi.py
で、activate_this.py
を
""" WSGI config for mutter project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/ """ from __future__ import absolute_import, unicode_literals # ここで activate_this.py を読み込む。環境依存になるので、wsgi 自体を分ける等検討の余地はありそう。 # サンプルのままだと python3 では動作しない。exec に変更する。 # [Alternative to execfile in Python 3? - Stack Overflow](https://stackoverflow.com/questions/6357361/alternative-to-execfile-in-python-3) activate_this = '/var/www/python-venv/mutter/.venv/bin/activate_this.py' exec(open(activate_this).read(),dict(__file__=activate_this)) # activate_this.py で site package のパスは設定されるが、アプリケーションディレクトリのパスは通らないので、sys.path.insert で追加する import sys sys.path.insert(0, "/var/xxxxxx/backend") import os import mutter.settings.production from django.core.wsgi import get_wsgi_application os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mutter.settings.base") application = get_wsgi_application()
wsgi.conf の 修正
副作用をpython-home
を
- wsgi.conf 以上で、
WSGIDaemonProcess proc user=app_usr group=app python-home=/var/www/python-venv/empty/.venv lang=ja_JP.utf8
mod_wsgi 関連の 設定は 終了です。
crontab の 変更
一部、
この
過去に
Mezzanine django-crontab を
以下、
# Django のプロジェクトのホームディレクトリに移動 cd /var/www/site/mutter.monotalk.xyz/backend/ # 仮想環境を有効化する source /var/www/python-venv/mutter/.venv/bin/activate # 既存のcron定義を削除 python manage.py crontab remove # 新たにcron定義を追加 python manage.py crontab add
crontab -e ---------------------- 00 */4 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run b3566f4bb9e6c276e923efc21ffb00be >> /tmp/poll_gists.log # django-cronjobs for mutter 10 */4 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run 39205c29f65e9f6b3fcd8cce2071d34f >> /tmp/create_related_posts.log # django-cronjobs for mutter 15 */4 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run a42264b4ad29b364122c651305fa698c >> /tmp/send_notifications.log # django-cronjobs for mutter 15 */4 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run e1afba0f90c8220d09cacb5c8cfb015d >> /tmp/blog_jobs/clearsessions.log # django-cronjobs for mutter 00 01 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run 45961d18ca57cabac3a3fc711ca0b013 >> /tmp/blog_jobs/collect_hatena_keywords.log # django-cronjobs for mutter 15 01 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run f4035cc25327585d140630754e3f6c27 >> /tmp/blog_jobs/collect_search_console_data.log # django-cronjobs for mutter 30 01 * * * /var/www/python-venv/mutter/.venv/bin/python /var/www/site/mutter.monotalk.xyz/backend/manage.py crontab run e6c43c4ec0e5a38b11a4ce830be8a06e >> /tmp/blog_jobs/classify_entry.log # django-cronjobs for mutter
以上で、
Wagtail の Version Up に よる エラー
venv 移行で
移行前の
Django Wagtail の Version Django 1.10.8 wagtail 1.13.1
移行後の
Django Wagtail の Version Django 2.1.8 wagtail 2.3
Wagtail の 変更箇所
Wagtail 1.13.1 の
ModuleNotFoundError: No module named 'wagtail.wagtailembeds'
Wagtail 2.0 release notes — Wagtail 2.0 documentation
Django の エラー
Model での
on_delete の 必須に なった ことによる エラー
ForeignKey の指定箇所で エラーに なりました。 on_delete 属性が 必須に なり、 指定していない 旨の エラーが 出力されました。
以下、記事を 読み 対処しました。
Django2.0から必須に なったon_deleteの 使い 方 - Django2の 実力を つける チュートリアルサイトDjangoBrothers urls.py の
include メソッド の 使用箇所での エラー
指定すべき内容の 違いで エラーが 発生しました。 - 1つ目
django.core.exceptions.ImproperlyConfigured: Passing a 3-tuple to include() is not supported. Pass a 2-tuple containing the list of patterns and app_name, and provide the namespace argument to include() instead.
- 2つ目 Wagtail の
TypeError: view must be a callable or a list/tuple in the case of include().
場合、 あらかじめ include している メソッドが あり、 include の 指定が 必要だったり 不要であったりします。
以下、記事を 読んで include 記述が 不要な 箇所を 削除しました。
Solving “django.core.exceptions.ImproperlyConfigured: Passing a 3-tuple to include()…” error after Django/Wagtail 2.0 upgrade | TimOnWeb
- 1つ目
参考
以下、
- venv: Python 仮想環境管理 - Qiita
- [Django][Apache]VirtualHostごとに
異なる venvで Djangoを 動かす|WEBプログラム覚書 - CentOS7に
Apache2.4最新版を yum installする - pyenv環境に
入らないでpyenv依存モジュールを 使った scriptを 実行する - Qiita - Alternative to execfile in Python 3? - Stack Overflow * Wagtail 2.0 release notes — Wagtail 2.0 documentation
- python - Cron and virtualenv - Stack Overflow
- No module named ‘wagtail.wagtailcore.edit_handlers’ getting this error after import · Issue #3862 · wagtail/wagtail
- Memo:[Django]バージョンに
よる urls.py内の includeの 仕様の 違い - Qiita
以上です。
コメント