せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【GAE】【Python】GAEで静的なサイトの構築

素朴なHP、いわゆるhtml/css/img で構成される静的なサイトの構築方法です。
 ⇒ホスティングサーバーとしてGAEを使用する方法ともいえます。

公式サイトを参考に、

効率上、App Engine では、静的ファイルはアプリケーション ファイルと分けて格納、処理されます。静的ファイルはアプリケーションのファイル システムでは使用できません。
静的ファイル ハンドラを使用して、URL パターンと、アプリケーションと共にアップロードされる静的ファイルへのパスを関連付けます。

https://developers.google.com/appengine/docs/python/config/appconfig?hl=ja#About_app_yaml

ということで、app.yaml でstatic_files属性を追加する。
任意のディレクトリが指定されると、そのディレクトリ内のindex.htmlが表示されます。

ローカルで表示できても、GAEにデプロイすると表示するファイルが見つからない事があるので注意。
 ⇒ルートディレクトリ直下のindex.htmlは、ローカルでは暗黙的に表示されますが、
GAE上では、static_files で明示的に紐付けないとエラーになりました。

■app.yaml ※ルートディレクトリ直下のindex.htmlが表示されなかったので少し修正

application: [appID]
version: 1
runtime: python
api_version: 1

handlers:

  • url: /

static_files: public_html/index.html
upload: public_html/index.html

  • url: (.*)/

static_files: public_html/\1/index.html
upload: source/(.*)/index.html

  • url: /(.*)

static_files: public_html/\1
upload: source/(.*)


■おまけ:upload属性は必須
↑のapp.yamlの「upload」は、1箇所目は省略できるのでは? とおもってコメントアウト。
結果、エラー。uploadは必須の仕様みたい。

File "C:\google_appengine\google\appengine\api\yaml_listener.py", line 177, in _HandleEvents
raise yaml_errors.EventError(e, event_object)
google.appengine.api.yaml_errors.EventError: Missing "upload" attribute for URL "(.*)/".
in "C:\Users\hoge_ADMIN\Desktop\gae_worspace\iena\app.yaml", line 11, column 1
2013-07-26 09:58:24 (Process exited with code 1)