エラーに躓いた箇所と解決策
モジュールのインストール先が異なっていた
pipでモジュールをインストールしているのに、.pyファイルを実行すると no module error というエラーが吐き出される。
pip freezeを使用して、モジュールを確認したところしっかりとインストールされていたので原因を突き止めるのに時間がかかった。
自分が立ち上げたVMには下記のようにpythonのバージョンが複数存在しており、通常のpipでインストールするやり方だと、本来インストールしたい場所でなく、別の場所にインストールされたので、モジュールをインストールする時に、パスも一緒に指定した
pip install numpy -t /usr/lib/python3/dist-packages
[ '/usr/lib/python3.5',
'/usr/lib/python3.5/plat-x86_64-linux-gnu',
'/usr/lib/python3.5/lib-dynload',
'/usr/local/lib/python3.5/dist-packages',
'/usr/lib/python3/dist-packages']
wsgiがpython2系でコンパイルされていた
apt-getでwsgiをインストールした時に、何も指定せずにインストールしてしまったために、.pyファイルは3系で書いていたため色々とエラーが出た。
pipでインストールすれば問題ないはずだが、apt-getを使う場合は下記のように指定する必要がある
apt-get install libapache2-mod-wsgi-py3
apache2の設定の書き方
古い書き方の情報も出回っており、ここに関してもエラーが多発した。
基本的には、WSGIDaemonProcess
とWSGIScriptAlias
があれば何とかなる。
<VirtualHost *:80>
ServerName localhost
WSGIDaemonProcess flask_app user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/flask/flask_app.wsgi
<Directory /var/www/flask>
WSGIProcessGroup flask_app
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
※WSGIDaemonProcessにpythonのパスを記述したけども一番最初のモジュールエラーは解決しなかった。
pythonのバージョンによるモジュールが対応していないエラー
デプロイしたpythonのバージョンが3.5系でIpython7.10系がインストールされていたが、3.5系は7.9系までしかサポートしていないため、エラーが出てしまっていた。
この辺は、バージョンを指定せずにいれてしまっていたため、多発した。
今度気をつける点
そもそも、venv環境をいれてデプロイした方がいい
改めて環境を見直すとすごく汚くなってしまったので、恐らく今回のVMは潰して別のVMを立てて、移行すると思う。一応デプロイはできたので、経験としては役立ちました。