Google App Engineでapp-engine-patch

nakachin-402009-09-29


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などがそのまま使えます。

まず、PythonDjango、GAEのSDKをインストールして動作を確認。ちゃんとローカルでdatastoreも使えました。

さて、次にapp-engine-patchですが、これは順を追って書いてみます。環境は、Windows Vistaです。

  1. http://code.google.com/p/app-engine-patch/:app-engine-patchからapp-engine-patch-1.1RC.zipをダウンロード。1.1にしたのは、Djangoの1.1に対応させたかったからです。
  2. ダウンロードしたファイルを適当なフォルダに展開します。
  3. 展開したapp-engine-patch-sampleのapp.yamlのapplicationの行を、GAE上に作成したapplication名に変更します。
  4. settings.pyのSECRET_KEYを適当に変更します。
  5. app-engine-patch-sampleのフォルダで、「manage.py runserver」を実行します。
  6. PILがないとのエラーが出たので、PythonのPILをインストールします。
  7. msgfmtがないとエラーが出たので、こちらもインストールします。Pythonのmsgfmt.pyが入っているので、それを使うようにソースを変更するか、バッチファイルを作成するかしても良かったのですが、インストールした方が早いです。
  8. 再度「manage.py runserver」を実行します。今度は、datastoreが読めないというエラーがでますが、これは無視しても大丈夫です。後で自動的に作成されます。
  9. http://localhost:8000/にブラウザからアクセスします。以下の画面が表示されます。
  10. 画面の「generate an admin user」をクリックします。すると、エラーが表示されます。(GAEにアップロードした場合は、ちゃんと動くのですが、ローカルだとエラーになりました。)
  11. 見ると「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」を追加しました。
  12. 再度「generate an admin user」をクリックすると、無事にユーザが作成されましたので、http://localhost:8000/adminにユーザ名:admin、パスワード:adminでアクセスできるようになりました。

これでとりあえずapp-engine-patchが動いたので、次はこちらを元に、Googleユーザとそれ以外のユーザの両ユーザの認証を作成してみます。