LoginSignup
0
1

More than 3 years have passed since last update.

Docker-Compose&Python3.6+NGINX+MariaDB10+uWSGIのDjango環境構築におけるMigrationエラー対処法について

Posted at

"Docker-ComposeでPython3.6+NGINX+MariaDB10+uWSGIのDjango環境欲張りセット"のおまけ。
https://qiita.com/NickelCreate/items/bed3dc9d088b57127ba7

@NickelCreate ++

環境
- Python 3.6.10
- Django 3.0.7

トラブル発生

つらつらと環境欲張りセットを実行していくと、マイグレーションコマンド実行でバージョン互換エラーが発生。

docker-compose run web ./manage.py makemigrations

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

モジュールを確認すると、以下のような構成(バージョンは最新版を当てたい)

requirements.txt
django
djangorestframework
django-filter
uwsgi
pymysql

MySQLクライアントモジュールを、pymysql から mysqlclient に変更&最新化しても現象は解消せず。。

困った。

トラブルシューティング

エラー文言でGoogleって見つかった参照記事【後述①】 を読んでみる。

「Fake PyMySQL's version and install as MySQLdb」
MySQLdb で偽装しろとな、まじか。

setting.py に書いてみる。

setting.py
import os
import pymysql

# connect mysql
pymysql.install_as_MySQLdb()

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

中略

# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'YOUR_DB_NAME',
        'USER': 'YOUR_DB_USER',
        'PASSWORD': 'YOUR_DB_PWD',
        'HOST': 'db',
        'PORT': '3306',
    }
}

# Fake PyMySQL's version and install as MySQLdb 【偽装ポイント】
pymysql.version_info = (1, 4, 2, "final", 0)
pymysql.install_as_MySQLdb()

以下略

再度実行…

docker-compose build
docker-compose up
docker-compose run web ./manage.py makemigrations

するも現象変わらず…

さらにGoogleると、 __init__.py も 追記修正必要な様子 【参照記事(後述②)】
To resolve this error, add below code in DjangoHelloWorld / DjangoHelloWorld / __init__.py file.

src/your_app/__init__.py
import pymysql
# install pymysql as mysql database driver.
pymysql.install_as_MySQLdb()

再々度実行…

docker-compose build
docker-compose up
docker-compose run web ./manage.py makemigrations

[ERROR] InnoDB: Cannot open datafile for read-only: './your_app/django_migrations.ibd' OS error: 71

なんか新しいエラーが出た、が前進している。

これはエラー発生時に作成されたファイル起因のようなので削除。

rm -f ./mysql/your_app/django_mi>grations.ibd

再実行…

docker-compose run web ./manage.py makemigrations

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
…

ようやっと、マイグレーションコマンドが通った。

お疲れ様でした。

■ 参照記事
① How to use PyMySQL with Django
https://adamj.eu/tech/2020/02/04/how-to-use-pymysql-with-django/

② How To Connect MySQL Database In Django Project
https://www.dev2qa.com/how-to-connect-mysql-database-in-django-project/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1