質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

2914閲覧

CentOS7+Django+Python+Appach+mod_wsgi連携 ModuleNotFoundError: No module named 'encodings'

RokuroYamaki

総合スコア13

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/01/18 17:52

環境

さくらVPS
CentOS7
Django 2.2.7
Python 3.7.5
mod-wsgi 4.7.0
Apache 2.4.6

前提・実現したいこと

djangoで作成したwebアプリを公開したいのですが、mod_wsgiとDjangoの連携が下記エラーによりうまくいきません。
かれこれ1週間くらい同じ問題に悩んでいます。もし知見のある方がいらっしゃれば御助力いただければ幸いです。

発生している問題・エラーメッセージ

Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings'

###現状まで行った内容
前略 公開鍵の設定・ユーザー名作成など
####1,pyenvを使ったpythonのインストール
参考サイト
CentOS7にPyenvとPython3系をインストール

####2,virtualenvで仮想環境作成
python3 -m venv env
envパス
/home/ユーザー名/env

####3,必要なライブラリDjango等をpip3でインストール
pip3 install Django==2.2.7

####4,pip3を利用したmod_wsgiのインストール
参考サイト
PythonのDjangoを動かすために「mod-wsgi」をインストールしたいのですができません...

####5,githubから作成したwebアプリをclone
djangoプロジェクトパス
/home/ユーザー名/hoge1/hoge2/myProject
wsgi.pyパス
/home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py

####6,django.confの作成(django.confはAppachのhttpd.confにincludeされます)

参考
centos7へapache2.4とmod_wsgiインストールし、djangoデプロイまで
django.confパス

etc/httpd/conf.d/django.conf

LoadModule wsgi_module modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so WSGIScriptAlias / /home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py WSGIPythonHome /home/ユーザー名/env WSGIPythonPath /home/ユーザー名/hoge1/hoge2/myProject <Directory /home/ユーザー名/hoge1/hoge2/myProject> <Files wsgi.py> Require all granted </Files> </Directory>

####7,再起動
systemctl restart httpd
ここでエラーは発生せず
####8,エラー確認
tail -f /var/log/httpd/error_log

試したこと

####エラーの発生原因がWSGIPythonHomeが間違ってるという情報があったためWSGIPythonHomeの理解を深める、WSGIPythonHomeのパスを変更
参考サイト
djangoチュートリアル学習中 Apache(mod_wsgi)動かず
How to use Django with Apache and mod_wsgi¶
参考サイト等を読んでみての私のWSGIPythonHomeの見解
WSGIPythonHomeはpythonの依存関係がvirtualenv内にある場合、virtualenvのルートパスをWSGIPythonHome に追加しなければいけない

$which python3

/home/ユーザー名/env/bin/python3

$mod_wsgi-express module-config

LoadModule wsgi_module "/home/ユーザー名/env/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so" WSGIPythonHome "/home/ユーザー名/env"

正しいように思えます・・

####WSGIPythonPathの変更
Djangoのプロジェクトのパスを指定するという情報もあれば,Pythonの場所にするという情報もあったりなので、下記などpythonの場所を指定してみたりしました。
WSGIPythonPath /home/ユーザー名/env/lib/python3.7/site-packages

####WSGIDaemonProcessを用いたdjango.confを作成
参考サイト
WSGIDaemonProcess
django.confを下記に書き換え

NameVirtualHost *:80 LoadModule wsgi_module modules/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so WSGISocketPrefix run/wsgi <VirtualHost *:80> ServerName domain.com WSGIDaemonProcess domain.com python-home=/home/ユーザー名/env python-path=/home/ユーザー名/hoge1/hoge2/myProject WSGIProcessGroup domain.com WSGIScriptAlias / /home/ユーザー名/hoge1/hoge2/myProject/mySite/wsgi.py <Directory /home/ユーザー名/hoge1/hoge2/myProject> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>

どれもだめでした。

怪しい点

エラーとの因果関係はわからないですが、原因の可能性あり

####そもそもpython3 manage.py runserver で接続できない(ローカルで繋がらない)
migrateは成功しています。
python3 manage.py runserver 0.0.0.0:8000
を実行時にはエラーは発生していませんが、表示されるURLをブラウザで開くと"このサイトにアクセスできません 接続が拒否されました"というメッセージが表示されます。

他の情報も思い出せば追記いたします。
1週間以上解決できず、大変困っています。
これは感覚の話で恐縮ですが、根本的に間違ってるかケアレスミスな気がします。
どうか心当たりのある方がいらっしゃれば御助力お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatamyiwathy

2020/01/18 18:18

「そもそもpython3 manage.py runserver で接続できない(ローカルで繋がらない)」ってことですが、コンソールにエラーなど出力されてませんか?pyenvとvirtualenvを併用してたりで環境にトラブルが発生してるような気がします。
RokuroYamaki

2020/01/19 03:20

>コンソールにエラーなど出力されてませんか? ターミナル上にもブラウザのコンソール上にもエラーは発生してません。 >pyenvとvirtualenvを併用してたりで環境にトラブルが発生してるような気がします。 可能性はあります。pyenvとvirtualenvに問題点があるかを確認する方法をもしご存知でしたらご教示お願いします。
tatamyiwathy

2020/01/19 04:13

manage.py runserver」はさくらVPSで実行してますか?
RokuroYamaki

2020/01/19 06:28

こちらの勉強不足で大変恐縮なのですが、"さくらVPSで実行"というのは、「サーバー(仮想専用サーバー)として利用しているのはさくらVPSで、そこにインストールしたcentOSにログインして、その中にあるmanage.py runserverを実行しているか」という意味でしょうか? そのような意図の場合、答えはイエスですが、違う意味の場合、詳細を教えていただければ幸いです。
tatamyiwathy

2020/01/20 04:02

さくらVPSにログインして実行しているか、であってます。 「manage.py runserver」でアクセスできないのはポートが空いていないからではないでしょうか。 もし開発用サーバーを立ち上げてアクセスしようとお考えでしたらsettpings.ptの「ALLOWED_HOSTS = ["*"]」でアクセスするホストを制限してください。だれでもアクセスしてヤバイことになります。 No module named 'encodings'のエラーについてはteratailで検索するといくつかヒットしますのでそちらをご確認ください。
RokuroYamaki

2020/01/20 12:03

ポート番号の線はアリそうですね。調査してみます。 >No module named 'encodings'のエラーについてはteratailで検索するといくつかヒットしますのでそちらをご確認ください。 いろいろなサイトを参考にして試しているのですが、現状解決に至っていません。
tatamyiwathy

2020/01/21 02:04

なるほど。できればローカル環境で動かしてwsgi系に問題があるのか、そうでないのか、の切り分けをしたいですね。トラブルが発生したときはできるだけシンプルな環境に作り直したほうが解決が早くなります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問