Google App Engineでapp-engine-patch
Google App Engine(GAE)を試してみました。
しかしGAE for Pythonをそのまま使うのではなく、Djangoを使いたかったので、http://code.google.com/p/app-engine-patch/:app-engine-patchを使ってみました。
app-engine-patchは、GAE上でDjangoを使うためのツールです。
これを使えばDjangoのadminなどがそのまま使えます。
まず、PythonとDjango、GAEのSDKをインストールして動作を確認。ちゃんとローカルでdatastoreも使えました。
さて、次にapp-engine-patchですが、これは順を追って書いてみます。環境は、Windows Vistaです。
- http://code.google.com/p/app-engine-patch/:app-engine-patchからapp-engine-patch-1.1RC.zipをダウンロード。1.1にしたのは、Djangoの1.1に対応させたかったからです。
- ダウンロードしたファイルを適当なフォルダに展開します。
- 展開したapp-engine-patch-sampleのapp.yamlのapplicationの行を、GAE上に作成したapplication名に変更します。
- settings.pyのSECRET_KEYを適当に変更します。
- app-engine-patch-sampleのフォルダで、「manage.py runserver」を実行します。
- PILがないとのエラーが出たので、PythonのPILをインストールします。
- msgfmtがないとエラーが出たので、こちらもインストールします。Pythonのmsgfmt.pyが入っているので、それを使うようにソースを変更するか、バッチファイルを作成するかしても良かったのですが、インストールした方が早いです。
- 再度「manage.py runserver」を実行します。今度は、datastoreが読めないというエラーがでますが、これは無視しても大丈夫です。後で自動的に作成されます。
- http://localhost:8000/にブラウザからアクセスします。以下の画面が表示されます。
- 画面の「generate an admin user」をクリックします。すると、エラーが表示されます。(GAEにアップロードした場合は、ちゃんと動くのですが、ローカルだとエラーになりました。)
- 見ると「common\appenginepatch\ragendja\dbutils.py」のFakeModelListPropertyクラスのget_value_for_datastoreメソッドの「if not self.indexed:」で、self.indexedが存在しないというエラーになっていました。とりあえず動かしたかったので、FakeModelListPropertyクラスの__init__メソッドの「if not kwargs.get('indexed',True):」のブロックに、「self.indexed = False」を追加しました。
- 再度「generate an admin user」をクリックすると、無事にユーザが作成されましたので、http://localhost:8000/adminにユーザ名:admin、パスワード:adminでアクセスできるようになりました。
これでとりあえずapp-engine-patchが動いたので、次はこちらを元に、Googleユーザとそれ以外のユーザの両ユーザの認証を作成してみます。