2011年8月2日火曜日

Google App Engine Goでは"_"(アンダースコア)に気をつけろ

Google App Engine for Go SDK1.5.2のローカル環境で発生しているのですが、
アプリケーションの初回ビルド時にGo言語のソースファイルに"_"が含まれていると、
ビルドは正常に通るのですが、レスポンスが404になってしまいます。
※MacOSX(32bit版SDK)とUbuntu11.04(64bit版SDK)で現象を確認しました。

例えば、以下のような構成で、
app.yaml
compiletest(ディレクトリ)
  compile_test.go

app.yaml
application: helloworld
version: 1
runtime: go
api_version: 2

handlers:
- url: /.*
  script: _go_app

compile_test.go
package compiletest

import (
 "fmt"
 "http"
)

func init() {
 http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
 fmt.Fprintf(w, "Hello World!")
}

中身はただのHelloWorldですが、この構成で初回ビルドを行うと、404が返ってきます。これが、ファイル名から"_"を削除した状態にして
アクセス(コンパイル、実行)した後、再度、"_"を付けた状態にしても正常に動作するようになります。

ということで、バグなのか、仕様なのか(多分バグだと思います)わかりませんが、ファイル名に"_"を付けた命名は
今の所、気をつけた方が良いと思います。

ちなみに、本番環境では試していないのでわかりません。