Amazon

2011年1月4日火曜日

Google App EngineでDjango1.2を動かす3

[稼動環境] Aptana Studio 2.0.5  + Python 2.7.1+ Pydev 1.6.4+ Django 1.2.4 + Google App Engine Helper for Django 1.0.9

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

コメントを投稿

Amazon3