Xserverのサーバー移行でDjangoがおかしくなった1のつづき
500エラーは解決したけれど、それで問題は終わらなかった。
ソースコードがそのまま表示される
pythonをリビルドしてページにアクセスすると、確かに500サーバーエラーは出なくなっていた。
かわりにソースコードがそのまま表示されていた。
ある意味500サーバーエラーの方がましかもしれない。
Xserverに問い合わせつつ、原因も探ってみる。
原因を探ってみる
Xserverではwsgiが使えないので、FastCGIでDjangoを公開している。
Webコンテンツディレクトリにmysite.fcgi
というファイルを置いてFastCGIで動かしている。
原因を探ると、どうもそのFastCGIに問題がありそうだ。
.htaccessの確認
まずは.htaccessファイルを確認してみた。
fcgiの拡張子のファイルをFastCGIとして動かすには.htaccessに
AddHandler fcgid-script .fcgi
と書くことになっている。
確認してみた。
…ちゃんとそうなっている。
組み込みのpythonやPHPで動くか
問題が後から入れたpythonやDjangoに由来するものか、確かめることにする。
ためしに
#!/usr/bin/python3.4 import sys print("Content-Type: text/plain;charset=utf-8\n") print('.'.join(map(str, sys.version_info)))
という内容で、foo.cgiというファイルを作ってみた。
#!/usr/bin/python3.4
としておけば、組み込みのpython3で実行される。
うまく動けばファイルを実行したpythonのバージョンが表示されるはずだ。
実行結果は
3.4.9.final.0
ちゃんと動く。
しかしfoo.fcgiにリネームすると、ソースコードがそのまま表示される。
同じようにPHPでfcgiのファイルを作ると、そちらは正常に動作した。
Djangoだけでなく、PythonのFastCGIすべてがエラーになったので、この時点でホスティング側の問題と考え原因の追及はやめた。
CGI版での動作を試す
ホスティング側の問題なら、最悪「対応しておりません」で済まされるかもしれない。
Djangoはやろうと思えばCGI版でも動かせるので、それを試してみることに。
(追記) いまからやるなら、cgi版とか言わずに仮想環境をつくってやるのが良いでしょう。
上記サイトを参考にさせてもらった。
環境構築等は済んでいるので、cgiを編集してアップロードするだけでよかった。
ありがたいことにDjangoをCGI版で動作させるファイルを公開してくれている人がいるので、それを使う。
からdjango-python2.cgi
をダウンロードして編集する。
(python3系ならdjango-python3.cgi
をダウンロードする。)
1行目
#!/home/user/.pyenv/versions/envname/bin/python
を自分のpython環境に合わせて変更。
35~36行目
# sys.path.append("/home/user/local/lib/python2.7/site-packages") # sys.path.append("/djangoproject/src")
をアンコメントして、それぞれ自分の環境に合わせてパスを書き換える。
35行目はローカルにインストールしたpythonのsite-packagesフォルダへのパス。
36行目は自分のDjangoプロジェクトへのパスとなる。
そして47行目には
environ['PATH_INFO'] = environ.get('PATH_INFO',"/")
を追加。
97行目
os.environ['DJANGO_SETTINGS_MODULE'] = 'application.settings'
のapplication.settings
を作成したプロジェクトのsettingsに変更する。
あとはファイル名をindex.cgi
とでもしてアップロードする。
アップロードしたファイルの実行権限を755(705)にしておくのと、.htaccess
の書き換えをしておく。
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
これで「対応しておりません」の対応はばっちりだ。
問い合わせで解決
Xserverに問い合わせると1日ほどたって、「サーバー側の補正をした」という連絡があった。
サイトにアクセスしてみるとちゃんとfcgi版で見れる。
これで終わったかと思いきや、メール送信プログラムでもトラブルが!