14

Django コードを 2.1.7 から新しい Django 2.2 に直接移動しています。Centos7 開発環境で発生した唯一の問題は、ローカル開発データベース (sqlite3) のバージョンが Python 3.6.7 と互換性がないことでした。

「manage.py runserver」から取得したエラーは次のとおりです。

django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later

これが AWS Elasticbeanstalk でサポートされている最大値であるため、別のバージョンの Python を使用できません。Python 3.6.7 にはバージョンの sqlite モジュールが付属しているようです:

>>> import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.7.17'
>>> 

ローカルの Centos7 ワークステーションで別の開発アカウントを使用し、pipenv シェルを発行して、コード開発と IDE を開始します。

私が見つけた唯一の回避策は、SQLite3 autoconf バージョン 3.27.2 を手動でダウンロードし、次のコマンドを使用して開発アカウントのホーム フォルダーに手動でコンパイルすることです。

wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz
gzip -d sqlite-autoconf-3270200.tar.gz
tar -xvf sqlite-autoconf-3270200.tar
cd sqlite-autoconf-3270200/
./configure --prefix=/home/devuser/opt/
make
make install

それに続いて、以下を反映するように .bashrc を変更しました。

export LD_LIBRARY_PATH="${HOME}/opt/lib"

devuser アカウントに再度ログインすると、これでうまくいくようです。私のアプリは、ローカル開発データベースを使用して正しく実行されているようです。

Python 3.6.7 (default, Dec  5 2018, 15:02:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
>>>import sqlite3
>>> sqlite3.version
'2.6.0'
>>> sqlite3.sqlite_version
'3.27.2'

私のローカル開発データベースは SQLite ですが、私の settings.py は、AWS で本番環境にあることを感知すると、SQLite3 データベース バックエンドをロードしません (環境変数フラグ PRODUCTION がチェックされている場合、Mysql 本番データベースをバックエンドとして使用します)。

問題に対する私の理解は正しいですか?私のアプローチと実装は受け入れられますか?

Python を再コンパイルするのは時間の無駄だと感じました。正直なところ、ローカルの mysql バージョンを立ち上げて sqlite で時間を無駄にするのをやめた方が早いかもしれません... 、新たなスタートのためにデータをロードします。

4

1 に答える 1