GAE で Django を動かすまでの遠い道のり・・・

Python をちゃんと(?)触り始めて、2ヶ月くらいかな?

Python おもしろい!最初は違和感を感じていたインデントによって制御が変わっちゃうところとかも、もはや非常に小気味よく感じている。ロジックの組み換えがなんともしやすいんだなこれ。 for (int i=0; i<x; i++) ってループが書けない!? そんな構文使う必要すらないぜ! リスト内包表記!! なんてかわいいやつなんだ!

って感じです。プログラム書くのがまた楽しくなってきた。なんというか、思考を直接的にコードに落としこめるので早くて効率も良い。仕事でやるなら時間もかけられるのだけれど、隙間時間を見つけてやるしかない趣味(?)のプログラミングで使うにはぴったり。

・・・ なんだけど、GAEでDjangoを動かそうとして、なんとかWelcomeページが動くまで結構大変だった(といっても3時間くらいか)ので、メモ。

1.前提

  • GAEは、WSGIというPythonのWebフレームワークのインターフェース規約にのっとっているので、Djangoだけではなく、準拠したフレームワークを利用することができる。
  • GAEはSQLデータベースをもたないので、Djangoの標準モデルクラスは使用できないなどの制限がある。ただし、別の実装を用意している。

2.環境構築手順

基本的に、http://code.google.com/intl/ja/appengine/articles/appengine_helper_for_django.html に従い実行していった。

2.1 Python for Windows Extensionsのインストール

上記手順に、Windows上でGoogleが提供するSDKをインストーラを使用している場合は、 http://sourceforge.net/projects/pywin32/ をインストールしてSDKを自動検出できるようにする必要がある。

gae_django02

・・・との記述でインストールしてみたが、Eclipse + PyDev で開発しようとしているので、不要だったかも。

また別マシンに構成するときに確認。

2.2 GAE-Django ヘルパーの導入

http://code.google.com/p/google-app-engine-django から、最新版とおぼしき、appengine_helper_for_django-r86.zip をダウンロード。Deprecated となっているのが気になる・・・。

解凍して、Eclipse + PyDev のプロジェクトのソースフォルダに展開する。上記手順サイトいは、mysite ディレクトリ云々の記述があるが、これはDjango チュートリアルの例に準じた記述のためで別に何でも良い。

展開後、サーバーを起動したところ、起動しているっぽい。いくつかWARNINGが出ているが、気にする必要はないと、上記の手順書にあるので気にしない。

gae_django03

2.3 最初のエラー  : ImportError: No module named _multiprocessing

http://localhost:8080 にアクセスしたところ・・・

gae_django04

なんじゃこりゃ。まったくどうしていいかわからないので、http://d.hatena.ne.jp/tmatsuu/20090818/1250606215 の対処法に従ってみる。

SDK google_appengine/google/appengine/tools/dev_appserver.py に以下の行を追加
    '_multibytecodec',      '_multiprocessing',     # この行を追加      '_random',

2.4 2つ目のエラー :  Django 1.0 or greater is required!

GAE-Djangoヘルパーさんは、Django 1.0 以降を要求しているにもかかわらず、GAEの都合により、SDKに同梱しているバージョンは0.96のようだ。

Django 0.96 に対応するヘルパーは appengine_helper_for_django-r52.zip

現在の最新版 GoogleAppEngine 1.2.5. でも変わらず。

gae_django05

SDKのDjangoは使わずに、最新の Django-1.1.tar.gz 別途ダウンロードしてプロジェクトの配下に配置してみる。

2.5 3つ目のエラー :  TypeError: Initialization arguments are not supported

さすがにちょっと疲れ始める。ググると、どうやら新たしいバージョンで問題が出ているようだ。1つ前のリリース Django-1.0.3.tar.gz を入手し展開したところ。

gae_django08

ここまでのバージョンのおさらい

  1. Google App Engine SDK ・・・ 1.2.5
  2. Django ・・・ 1.0.3
  3. Django ヘルパー ・・・ 0.86

2.6 It worked #1

さて実行!

gae_django09

おっしゃ。とりあえずWelcomeページが起動した。

2.7 このままじゃ・・・

プロジェクト配下にDjangoを置いたが、GAEでは、ファイル数に上限(1000)があり、このままでは発行できないようだ。zipimport という機能をつかうことによって、zipファイルからPythonモジュールを読み込むことができるため、djangoフォルダをzipすることで1つにでき、上記制限をクリアすることができる。お得だ。ただ、GAE版 zipimport は pycが使えないなどの制約があるよう。ま、とりあえずいいか。

djangoフォルダをルート直下に含んだ形になるように圧縮する。

gae_django11

main.py に以下の記述を追加。

# Add Django 1.0 archive to the path. django_path = 'django.zip'

sys.path.insert(0, django_path)

2.8 It worked #2

再度実行してみる。よしっ

gae_django12

3. 発行

C:\Program Files\Google\google_appengine>appcfg.py update "C:\Program Files\eclipse3.4R2\workspace\typea-services\src"

としたところ、またエラー・・・

You do not have permission to modify this app (app_id=u'google-app-engine-django').

おっと、アプリケーションIDを修正する必要があった。

gae_django13

4. It worked !!

gae_django14

結構つかれたぞ。