前回、前々回からのどハマリ続きのDjango 1.2.4 on GAE
Google App EngineでDjango1.2を動かす2
Google App EngineでDjango1.2を動かす1
引き続き動かないので、問題判別のために幾つか実験をば。
- [Djangoのバージョン問題?] django.zipの中身を1.2.4から1.1.3に変更 -> 変わらず
 - [Eclipseの問題?] django.zipを消して、LocalのPCにインストールされているDjango1.2.4を使用、main.pyを通常のmain.pyに変更 -> "google.appengine.dist._library.UnacceptableVersionError"となる
 - [Eclipseの問題?] django.zipを消して、LocalのPCにインストールされているDjango1.2.4を1.1.3に変更、main.pyを通常のmain.pyに変更 -> 正常に稼動
 
以上の検証結果より、main.pyが悪さをしている様子。
もう一度main.pyを見直してみる。
もともとappengine_helper_for_django-r109.zipを展開したmain.pyは以下の通り
# Standard Python imports. import os import sys import logging from appengine_django import InstallAppengineHelperForDjango InstallAppengineHelperForDjango() from appengine_django import have_django_zip from appengine_django import django_zip_path # Google App Engine imports. from google.appengine.ext.webapp import util # Import the part of Django that we use here. import django.core.handlers.wsgi def main(): # Ensure the Django zipfile is in the path if required. if have_django_zip and django_zip_path not in sys.path: sys.path.insert(1, django_zip_path)
ここでInstallAppengineHelperForDjango()の行でインストールされているDjangoのバージョンをチェックして、1.2以上だとgoogle.appengine.dist._library.UnacceptableVersionErrorをはいていた。
そこでGoogleの"Zipimport を使って App Engine で Django 1.0 を使用する"を参照して作成したmain.pyが以下
# Standard Python imports.
import os
import sys
import logging
from appengine_django import InstallAppengineHelperForDjango
InstallAppengineHelperForDjango()
from appengine_django import have_django_zip
from appengine_django import django_zip_path
# Google App Engine imports.
from google.appengine.ext.webapp import util
# Import the part of Django that we use here.
import django.core.handlers.wsgi
# Uninstall Django 0.96.
for k in [k for k in sys.modules if k.startswith('django')]:
    del sys.modules[k]
# Add Django 1.0 archive to the path.
django_path = 'django.zip'
sys.path.insert(0, django_path)
print sys.path
# Django imports and other code go here...
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
def main():
  # Ensure the Django zipfile is in the path if required.
  if have_django_zip and django_zip_path not in sys.path:
      sys.path.insert(1, django_zip_path)
"# Uninstall Django 0.96."行から"def main()"までが追記したコード。
だけど、これをよくよく考えてみると"InstallAppengineHelperForDjango()"の後に、Django 0.96モジュールを抜いて、zipにしたDjango1.2.4をimportしている。
要は、せっかくモジュールのチェックをしたのにその後にモジュールを入れ替えているわけです。そりゃ意味ないわな。。。
ということでモジュール入れ替えを先にしたコードが以下。
# Standard Python imports.
import os
import sys
import logging
# Uninstall Django 0.96.
for k in [k for k in sys.modules if k.startswith('django')]:
    del sys.modules[k]
# Add Django 1.2.4 archive to the path.
django_path = 'django.zip'
sys.path.insert(0, django_path)
from appengine_django import InstallAppengineHelperForDjango
InstallAppengineHelperForDjango()
from appengine_django import have_django_zip
from appengine_django import django_zip_path
# Google App Engine imports.
from google.appengine.ext.webapp import util
# Import the part of Django that we use here.
import django.core.handlers.wsgi
def main():
  # Ensure the Django zipfile is in the path if required.
  if have_django_zip and django_zip_path not in sys.path:
      sys.path.insert(1, django_zip_path)
これで正常に稼動した。
今回のどハマリの原因は
Eclipseの起動設定とGoogle App Engine Helper for DjangoのDjango受け入れバージョン問題, Django 1.2の使用, という3つの点が相まって問題を複雑にしていたわけですね。。。(--;
0 件のコメント:
コメントを投稿