なんの幸運か、Softbank(しかもJ-phone時代からの)ユーザだったので、SMS認証もアッサリ通ってGAEのアカウントをゲットしたわけですが・・・(ただしiPhoneには興味ほぼなし)。
というわけでishikawaさんがブログをGAEに移行された、というのを知って俺も移行しようかなあとか思いつつブログアプリ作りました。すでに今ブログで使っている機能は全て実装済みだったりします。デザインも全頁XHTMLTr validでCSSもvalidなことを確認済みだったりします。しかもDjangoじゃなくてweb.pyだったりします。慣れてるしね。
それはおいといて、データストアまわりがそのままだと
-
filter("hoge =", value)が長ったらしい - CRUDが微妙。
- フォーム作成用等に空のモデルを一時的に作成したいけど、作成した時点でvalidateされるので作成できない
らへんがいまいちだったで、ちょっといじってみました。
- def _getattr(self, name):
- if name.endswith("_eq"):
- return lambda v: self.filter("%s ="%name[:-3], v)
- raise AttributeError(name)
- setattr(db.Query, "__getattr__", _getattr)
- class ModelMixin(object):
- default_order = None
- _stab_class = None
- @classmethod
- def stab(cls):
- if not cls._stab_class:
- stab = type('Stab%s'%cls.__name__, (cls,), dict())
- for k,v in stab._properties.iteritems():
- v.required = False
- v.choice = None
- v.validator= None
- cls._stab_class = stab
- stab = cls._stab_class()
- for k,v in stab._properties.iteritems():
- v.__set__(stab, v.default_value())
- return stab
- @classmethod
- def create(cls, *a, **k):
- obj = cls(*a, **k)
- obj.put()
- return obj
- @classmethod
- def find_all(cls):
- result = cls.all()
- if cls.default_order is not None:
- return result.order(cls.default_order)
- return result
- def update(self, **k):
- for prop in self.properties().values():
- if prop.name in k:
- prop.__set__(self, k[prop.name])
- self.put()
- def destroy(self):
- self.delete()
これで
- class Test(ModelMixin, db.Model):
- name = db.StringProperty(require=True)
- created_at = db.DatetTmeProperty(auto_now_add=True)
- default_order="-created_at"
- Test.find_all() # created_atの降順
- Test.all().name_eq("user").update(created_at = datetime.now())
- stab = Test.stab() #nameがなくても作成できる
こんな感じにかけます。
さて、そんなこんなでブログアプリを作ったのはいいんだけど、なんとなく移行する気にならない。現在はWordpressで運用しているけど、正直セキュリティホールは多いし、ソースコードを見ると泣きたくなるようなコードだし、頻繁なバージョンアップはめんどくさい・・・。プラグインのセキュリティホールまで考えるとなおめんどくさい。しかもそこまで機能を使い倒しているわけじゃないし。
だからGAEにでも移行したいんだけど・・・。データがGoogleに握られるのはそこまで心配じゃない。ブログサービスでブログをやれば、そのブログサービス事業者にデータを握られるってのと同じだから気にならないんだな。移行作業自体も記事数がかなり少ないのでそんなにめんどくさそうではない。
ひとつ引っかかっているのはトランザクションの問題。まぁめったにトランザクションで問題はおきないと思うけど、GAEのトランザクションは一応ある、といった程度でほとんど使えない。使おうとしたらtransactionの中でこれはしちゃだめ、これもしちゃだめ、とおこられまくったので現在トランザクション管理ができていない。GAEには集約系のメソッドがないので、月別記事数とか、タグ別記事数とかを記事のCRUD時に別モデルで管理しているわけだけど、ここのトランザクションが管理できないのは結構不安。
もうひとつはなんとなーく使い切らないんだけど無料の上限である500Mという容量が微妙。画像のアップとかしなけりゃまず大丈夫なんだけど。
その他にもなんとなくGoogleの罠じゃないかとかいろいろ気になって移行に踏み切れないでいる今日この頃。実際に本格的にGAEに移行した人の感想がききたいなあ。
2 comments
trackback uriあー、使ってないわー。記事数もタグも毎回計算 + memcached 任せ。
> Wordpress
面倒くさいよね。。こっちも同じ理由 + サーバ邪魔、でタイミングもよかったので GAE に移行しました。
> 容量
いい機会なので画像は全部 Flickr にした。
癖もあるし、管理機能もしょぼいけど、サーバのこと考えなくていいのは、やっぱ楽です。
>>あー、使ってないわー。記事数もタグも毎回計算 + memcached 任せ。
トランザクションが使い物にならないとそうなりますよねえ。try exceptで自前トランザクションすれば何とかなるのかなあ・・・
それよりは記事とかコメントの更新時に全計算してキャッシュしたほうがよさそうだなあ・・・
>> 面倒くさいよね。。こっちも同じ理由 + サーバ邪魔、でタイミングもよかったので GAE に移行しました。
めんどくさいですよねえ。うちはそもそもレンタルサーバなんですよね。だから決心がつかないのかも。
>> 容量
俺もFlickrにするか、アップローダだけ別サブドメインで立てようかな、とか思っています。
>> 癖もあるし、管理機能もしょぼいけど、サーバのこと考えなくていいのは、やっぱ楽です。
やっぱり癖はありますよねえ。でも根っからのPythonistaとしてはPythonで書いたアプリがサクサク動くだけで相当うれしいんですけどね(笑
わざわざ感想ありがとうございました。
Leave a Comment