質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

解決済

GAEにgoapp deployするとyaml_errors.EventError: Unknown url handler typeのエラー

pecchan
pecchan

総合スコア504

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。

1回答

-1評価

0クリップ

741閲覧

投稿2021/12/16 00:50

はじめてGAE,GOをさわってみてます。

こちら
を参考にしました。参考先のまんまコピーですが、以下のような2つのファイルを作成しデプロイしたところエラーになりました。

app.yaml

yaml

application: point-viewer-335223 version: 1 runtime: go api_version: go1 # ルートのみ認証不要 handlers: - url: / script: _go_app - url: /.* script: _go_app login: required auth_fail_action: redirect

main.go

Go

// // 会員向け点数告知(サンプル版) // package main import ( "fmt" "net/http" "strconv" "google.golang.org/appengine" "google.golang.org/appengine/datastore" "google.golang.org/appengine/user" ) // 会員情報 type UserInfo struct { UserId string // 会員ID Point int // 点数 } // 初期化 func init() { http.HandleFunc("/", rootPage) http.HandleFunc("/admin", adminPage) http.HandleFunc("/entry", entryAction) http.HandleFunc("/viewer", viewerPage) } // ルートページ(/) func rootPage(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-type", "text/html; charset=utf-8") ctx := appengine.NewContext(r) u := user.Current(ctx) // ログイン情報 var userView string if u == nil { url, _ := user.LoginURL(ctx, "/") // ログインURL userView = fmt.Sprintf("あなたは、ログインしていません。<a href='%s'>ログイン</a>", url) } else { url, _ := user.LogoutURL(ctx, "/") // ログアウトURL userView = fmt.Sprintf("あなたは、%sさんです。<a href='%s'>ログアウト</a>", u.Email, url) } fmt.Fprintf(w, ` <h1>会員向け点数告知(サンプル版)</h1> 会員向けにインターネットから自身の点数を確認させるWebサービスです。 Google(又はG Suite)ユーザ認証機能を利用しています。 %s <hr /> 以下のページはログインが必要です。 <a href="/admin">管理者ページ(会員と点数の登録)</a> <a href="/viewer">会員ページ(点数の照会)</a> `, userView) } // 管理者ページ(/admin) func adminPage(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-type", "text/html; charset=utf-8") //ctx := appengine.NewContext(r) fmt.Fprintf(w, ` <h1>管理者ページ</h1> ここでは管理者が会員と点数の登録を行います。 サンプル版では単純な上書き登録又は削除のみ可能です。 本来は管理者以外のアクセスを制限しますが、サンプル版では制限していません。 <hr /> <form action="/entry" method="post"> ■会員ID:<input type="input" name="user-id" /> Googleアカウント(又はG Suite)のメールアドレスを入力します。 ■点数:<input type="input" name="point" /> 点数を数字で入力します。(空欄:会員IDの削除) <button type="submit">登録</button </form> <hr /> <a href="/">戻る</a> `) } // 登録アクション(/entry) func entryAction(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-type", "text/html; charset=utf-8") ctx := appengine.NewContext(r) id := r.FormValue("user-id") // 会員ID if id == "" { http.Error(w, "会員IDが指定されていません。", http.StatusBadRequest) return } key := datastore.NewKey(ctx, "UserInfo", id, 0, nil) // KEY生成 pointStr := r.FormValue("point") // 点数 // 点数が未設定なら削除する if pointStr == "" { err := datastore.Delete(ctx, key) // 削除 if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } fmt.Fprintf(w, ` %s を削除しました。 <a href="/admin">戻る</a> `, id) return } // 点数が設定されていれば上書登録する point, err := strconv.Atoi(pointStr) //数値変換 if err != nil { http.Error(w, "数値変換エラー", http.StatusBadRequest) return } info := UserInfo{UserId: id, Point: point} _, err = datastore.Put(ctx, key, &info) // 上書き登録 if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } fmt.Fprintf(w, ` 登録しました。 会員ID: %s 点数: %d点 <a href="/admin">戻る</a> `, info.UserId, info.Point) } // 会員ページ(/viewer) func viewerPage(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-type", "text/html; charset=utf-8") ctx := appengine.NewContext(r) u := user.Current(ctx) key := datastore.NewKey(ctx, "UserInfo", u.Email, 0, nil) // KEY生成 // 点数の参照 var info UserInfo err := datastore.Get(ctx, key, &info) // 参照 if err != nil { http.Error(w, "あなたは会員登録されていません。", http.StatusNotFound) return } fmt.Fprintf(w, ` <h1>点数の照会</h1> こんにちは、%sさん あなたの点数は %d 点です。 <a href="/">戻る</a> `, info.UserId, info.Point) }

以下のようにdeployするとエラーになりました。

cmd

tanxx10@cloudshell:~/point-viewer (point-viewer-335223)$ goapp deploy Traceback (most recent call last): File "/google/go_appengine/goapp", line 136, in <module> goroot = GetGoRoot(os.environ['GOPATH'], sys.argv) File "/google/go_appengine/goapp", line 117, in GetGoRoot app_yaml = _ParseAppYaml(app_yaml_path) File "/google/go_appengine/goapp", line 91, in _ParseAppYaml return appinfo_includes.Parse(f) File "/google/go_appengine/google/appengine/api/appinfo_includes.py", line 57, in Parse appyaml, _ = ParseAndReturnIncludePaths(appinfo_file, open_fn) File "/google/go_appengine/google/appengine/api/appinfo_includes.py", line 82, in ParseAndReturnIncludePaths appyaml = appinfo.LoadSingleAppInfo(appinfo_file) File "/google/go_appengine/google/appengine/api/appinfo.py", line 2664, in LoadSingleAppInfo listener.Parse(app_info) File "/google/go_appengine/google/appengine/api/yaml_listener.py", line 242, in Parse stream, loader_class, version=version, **loader_args)) File "/google/go_appengine/google/appengine/api/yaml_listener.py", line 180, in _HandleEvents raise yaml_errors.EventError(e, event_object) google.appengine.api.yaml_errors.EventError: Unknown url handler type. <URLMap secure=default static_files=None application_readable=None auth_fail_action=redirect require_matching_file=None static_dir=None redirect_http_response_code=None http_headers=None url=/ script=None upload=None api_endpoint=None expiration=None position=None login=optional mime_type=None > in "/home/tanxx10/point-viewer/app.yaml", line 9, column 2

エラーメッセージでググっていますが有効な情報にたどり着かずにいます。
先輩方アドバイス宜しくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Google App Engine

Google App Engineは、Googleの管理するデータセンター上でウェブアプリケーションの開発が可能なクラウドコンピュータ技術です。Java、Python、Go用にSDKが用意されています。