Xserverのサーバー移行でDjangoがおかしくなった2

Xserverのサーバー移行でDjangoがおかしくなった1のつづき

500エラーは解決したけれど、それで問題は終わらなかった。

ソースコードがそのまま表示される

pythonをリビルドしてページにアクセスすると、確かに500サーバーエラーは出なくなっていた。
かわりにソースコードがそのまま表示されていた。

ある意味500サーバーエラーの方がましかもしれない。

Xserverに問い合わせつつ、原因も探ってみる。

原因を探ってみる

Xserverではwsgiが使えないので、FastCGIDjangoを公開している。

Webコンテンツディレクトリにmysite.fcgiというファイルを置いてFastCGIで動かしている。

原因を探ると、どうもそのFastCGIに問題がありそうだ。

.htaccessの確認

まずは.htaccessファイルを確認してみた。
fcgiの拡張子のファイルをFastCGIとして動かすには.htaccess

AddHandler fcgid-script .fcgi

と書くことになっている。

確認してみた。
…ちゃんとそうなっている。

組み込みのpythonPHPで動くか

問題が後から入れたpythonDjangoに由来するものか、確かめることにする。
ためしに

#!/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にリネームすると、ソースコードがそのまま表示される。

同じようにPHPfcgiのファイルを作ると、そちらは正常に動作した。

Djangoだけでなく、PythonFastCGIすべてがエラーになったので、この時点でホスティング側の問題と考え原因の追及はやめた。

CGI版での動作を試す

ホスティング側の問題なら、最悪「対応しておりません」で済まされるかもしれない。

Djangoはやろうと思えばCGI版でも動かせるので、それを試してみることに。

(追記) いまからやるなら、cgi版とか言わずに仮想環境をつくってやるのが良いでしょう。

XREAでDjangoを動かす - 備忘録的な

上記サイトを参考にさせてもらった。
環境構築等は済んでいるので、cgiを編集してアップロードするだけでよかった。

ありがたいことにDjangoCGI版で動作させるファイルを公開してくれている人がいるので、それを使う。

GitHub - chibiegg/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版で見れる。

これで終わったかと思いきや、メール送信プログラムでもトラブルが!

長くなりそうなので、続きは次の記事に。