前回、前々回からのどハマリ続きの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 件のコメント:
コメントを投稿