Google App Engine ではプログラムから static ファイルを読みこめない
Google App Engine で、スクリプトから画像ファイルの一覧を取り出そうとしたけど、できなくてはまった。
helloworld.py
# -*- coding: utf-8 -*- import os, glob print "Content-Type: text/plain" print "" print "hello" imgdir = os.path.join(os.path.dirname(__file__), 'img') for x in glob.glob(imgdir + '/*'): print x #=> 何も表示されない print open(imgdir + '/favicon.ico') #=> IOError: [Errno 13] file not accessible
ドキュメントによれば、ファイルへの書き込みはできなくても読み込みはできるはずなんだけど。
アプリケーションは、ファイル システムへの書き込みはできません。ファイルの読み取りはできますが、アプリケーション コードとともにアップロードされたファイルのみに限られます。
http://code.google.com/intl/ja/appengine/docs/whatisgoogleappengine.html
と思ってたら、こんな投稿が。
You can read files that weren't marked as static resources, in the regular fashion.
Google グループ
どうも、static ファイルとして設定したファイルは、スクリプトから読み出せないようだ。
application: helloworld version: 1 runtime: python api_version: 1 handlers: - url: /css static_dir: css - url: /js static_dir: js - url: /img static_dir: img # 'img' 以下は static ファイルとして指定 - url: /.* script: helloworld.py
つまり、static ファイルとそうでないファイルとでは、そもそもファイルの配置場所が違うんだろうな。だからスクリプトからは static ファイルが簡単には読み出せないんだろう。
ところでこの制限は公式のドキュメントに書かれてあるんだろうか。ご存知の方がいましたら教えてください。