2012年9月15日土曜日

app engine python27に移行

訳あって、app engine アプリケーションを製作中。当然pythonです。

で、tumblpyが、python2.7ベースで出来てることもあり、
https://github.com/michaelhelmick/python-tumblpy
ヨクヨク見たら、appengine もpython2.7で稼働できるらしく、
じゃあ移行してみようかと。

結論から言うと、ハマりますね。オフィシャルドキュメントを読んでも散漫でよくわからない。情報量は足りてるのですが。

  • アプリケーションインスタンス設定
    • High Replication Datastoreである必要があります。
    • そんな難しい話じゃなくて、https://appengine.google.com/ のStorage Schemeの欄を参照。
    • 残念ながら駄目だった場合、新規にアプリケーションを作成する必要があります。1個損した気分。
      • 同じ個数をDisable/Deleteそれば、総数は相殺するらしい。
    • ドキュメントには application idに"-hrd"を付けてね!とか書いてあるけど、これは移行するときに、id名の重複を懸念してのアドバイスであって、本質的には「設定」の問題。
      • 新規(Create Application )の場合でのみ、Storage Optionが選択できる。
        • High Replication(default) と Master/Slaveが選べるらしい。
          • 前者がdefaultになってるし、後者はdeprecatedなので、わざわざ選び直す意味はないと思われる。
  • app.yaml
    • runtime: python27
    • threadsafe: false
      • 無論、trueが望ましいと思われるが、実装に依存する可能性もあり、怖気づいたので。
  • wsgiref
    • os.path.dirname(__file__) != "."
      • テンプレートの読み込み等で、カレントディレクトリ前提に書いちゃってる部分は、フルパスを補う必要があり。
    • self.respone.writeの引数に、strしか受け付けない
      • assert type(data) is StringType,"write() argument must be string" AssertionError: write() argument must be string とか面妖なエラーメッセージに化けて迷宮入りします。
      • self.response.write( str(html1) ) とかで解決することはする