Xserverの自動更新でトラブル発生
先日Xserverのお知らせページで「『sv1~sv1999サーバー』ハードウェアの大幅増強および最新サーバー環境への移行スケジュールについて」というお知らせがあった。
自動で移行してくれるって話なので放っておいたら、夜中に最新サーバー環境へと移行していた。
問題はそれでサーバーに入れていたDjangoの動作がおかしくなってしまったことだ。
いろいろやってどうにか解決したけれど、かなり面倒だったので後々のためにメモ。
なおXserverのサポートに問い合わせたところ、
「Django」や「Python2.7」など、お客様側で設置されたプログラムは基本的に【サポート外】としております。
ただし、移行メンテナンスではサーバー側の仕様が一部変更となり、メンテナンスに起因してエラーが発生している場合もございますので、 当サポートにて、可能な範囲で確認を行いたく存じます。
とのことで、今回は対応してくれた。
Djangoの環境
Xserverレンタルサーバー
Django1.8.2 (ユーザーディレクトリにインストール)FastCGIで動作。
Python2.7.10 (Djangoを入れるためにユーザーディレクトリにインストール。)
仮想環境にしておけばよかった
今からやるなら、xserverはlinuxbrewとpipenvで仮想環境を構築できるので、そちらにしたほうが良いと思う。
ページが500サーバーエラーになる
公開しているURLにアクセスしても500サーバーエラーとなる。 管理画面からサーバーのエラーログをダウンロードすると、こんな感じでエラーが記録されていた。
[Thu Oct 11 08:17:06.581422 2018] [fcgid:warn] [pid 57417] (104)Connection reset by peer: [client xxx.xxx.xxx.xxx:37926] mod_fcgid: error reading data from FastCGI server, referer: https://xxx/
[Thu Oct 11 08:17:06.581455 2018] [core:error] [pid 57417] [client xxx.xxx.xxx.xxx:37926] End of script output before headers: mysite.fcgi, referer: https://xxx/
そしてSSHのpythonで例えばimport md5
をしようとすると
ERROR:root:code for hash md5 was not found. Traceback (most recent call last): File "/home/xxx/local/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/home/xxx/local/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type md5 ERROR:root:code for hash sha1 was not found. Traceback (most recent call last): File "/home/xxx/local/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/home/xxx/local/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type sha1 ERROR:root:code for hash sha224 was not found. Traceback (most recent call last): File "/home/xxx/local/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/home/xxx/local/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type sha224 ERROR:root:code for hash sha256 was not found. Traceback (most recent call last): File "/home/xxx/local/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/home/xxx/local/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type sha256 ERROR:root:code for hash sha384 was not found. Traceback (most recent call last): File "/home/xxx/local/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/home/xxx/local/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type sha384 ERROR:root:code for hash sha512 was not found. Traceback (most recent call last): File "/home/xxx/local/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/home/xxx/local/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type sha512 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/xxx/local/lib/python2.7/md5.py", line 10, in <module> from hashlib import md5 ImportError: cannot import name md5
このようなエラーが出る。
Pythonのリビルドで解決
これはサポートが解決してくれた。
お客様が導入されたPython2.7のライブラリ参照先が、現在のサーバー環境に即していないようでございます。 お手数ではございますが、Python2.7につきまして、 現在のサーバーにてリビルドすることで解消する可能性がございます。
指示通りリビルドすると500サーバーエラーは出なくなった。
$ cd ~/local/src/Python-2.7.10 $ ./configure --prefix=$HOME/local $ make $ make install
/local/src/Python-2.7.10は、前回ビルドした時のを削除していなかったのでそのまま利用した。
しかし、今度は別のエラーが現れた!