昔Django+GAEで作ったサービスをKayでリプレースしようとしている
app.yamlで既存のアプリと同じapplication名にして、versionを変えてやれば既存のサービスを走らせたままそのDatastoreにアクセスできる別アプリをデプロイできるはず。
まず、KayはKindをマングリングしてしまうのでそのままではItemって名前のモデルを作ってもKindがcore_itemみたいな名前になってしまって既存のデータが読めない。settings.pyでADD_APP_PREFIX_TO_KIND = Falseにしておく。
ローカルの開発サーバでは動くので、じゃあデプロイしてみるか、と試してみたら動かない。「TemplateNotFound: core/index.html」などと言われる。うーむ。Kay単体で作ってデプロイしたときにはこんな問題は起きなかったので、かつてDjangoで作った時の設定がどこかに残っていたりするんだろうか??
TEMPLATE_DIRSに明示的に指定してもダメだ
TEMPLATE_DIRS = (
"core/templates/",
)
そもそもcore/index.htmlを読んでいるけど実体はcore/templates/index.htmlにあるしなぁ。Jinja2かKayの中でなんかうまくいじっているだろうけど、なにがどうなってるんだろうなぁ。
解決!tmatsuoさんの指摘通り、やはり原因はテンプレートがpreparseされていないことでした。
Kay(が使っているJinja2)はテンプレートを事前にパースしてPythonのコードに変換していて、これがpreparse。manage.py preparse_appsでpreparseの処理を行うことができるけど、普段manage.py appcfg updateしたときには自動的にそれをやってくれている。今回の問題は僕がmanage.pyを使わずに直接appcfg.py updateをしていたのが原因。manage.py経由でupdateしたらあっさり動くようになりました!