ご覧いただきありがとうございます!
領護(りょうご)です。
この記事では、Python × Djangoで作成したサイトをApacheを使ってデプロイする時に出る、No module named 'encodings'エラーの確認すべきポイントを解説します。
実行環境
Ubuntu・・・20.04.4 LTS
Apache2・・・2.4.41
Python・・・3.8.10
Django・・・3.2.12
Pythonのパーミッション権限は許可できているか
pipenvやvenvなどで仮想環境を作成してデプロイした時、Pythonのパーミッション権限が許可できているか確認します。
仮想環境の作成
今回は、/home/[ユーザー名]/test_webにpipenvを使用して仮想環境を作成します。
[ユーザー名]には、サーバーでログイン中のユーザー名が入ります。
cd /home/[ユーザー名]/test_web
pipenv --python 3
下記の内容が表示されると仮想環境の作成が完了です。
? Successfully created virtual environment!
Virtualenv location: /home/[ユーザー名]/.local/share/virtualenvs/test_web-_pb-mKqO
Creating a Pipfile for this project...
確認方法
仮想環境の作成が完了したら、パーミッション権限が下記のように設定されているか確認します。
パーミッション権限を確認する
ls -l
各フォルダのパーミッション権限設定
(755)drwxr-xr-x /home/
(755)drwxr-xr-x /home/[ユーザー名]/
(775)drwxrwxr-x /home/[ユーザー名]/.local/share/virtualenvs/test_web-_pb-mKqO
パーミッション権限変更
パーミッション権限が正しく設定できていない場合は、下記のコードでパーミッション権限を変更します。
各フォルダのパーミッション権限を変更
sudo chmod -R 755 /home
sudo chmod -R 755 /home/[ユーザー名]
sudo chmod -R 775 /home/[ユーザー名]/.local/share/virtualenvs/test_web-_pb-mKqO
Apache2のconfファイルに全角を使っていないか
Apache2のconfファイルに全角を使うとエラーになるので確認します。
Apache2のconfファイルを開く
[設定ファイル名]には、ご自身で作成したApache2の設定ファイル名が入ります。
sudo nano /etc/apache2/sites-available/[設定ファイル名].conf
赤枠のインデント部分が全角やタブになっていることがよくあります。
全角入力になっている場合は、半角入力に修正します。
DBのSQLiteの書き込み権限は許可できているか
DBにDjango標準のSQLiteを使用する時は、SQLiteファイルのパーミッション権限が書き込み可になっているか確認します。
確認方法
パーミッション権限を確認する
cd /home/[ユーザー名]/test_web/test_project
ls -l
SQLiteのパーミッション権限設定
(777)-rwxrwxrwx /home/[ユーザー名]/test_web/test_project/db.sqlite3
パーミッション権限変更
パーミッション権限が正しく設定できていない場合は、下記のコードでパーミッション権限を変更します。
SQLiteのパーミッション権限を777に変更
sudo chmod 777 /home/[ユーザー名]/test_web/test_project/db.sqlite3
最後に
今回ご紹介した内容は、個人的によくハマってしまうポイントを書きました。
皆さんの助けになれば幸いです!