私は1つの単純なtxtテンプレートで本当に奇妙なエラーに遭遇しています。 XMLとして提供するとエラーはありません。そのため、エラーはテンプレート自体や関連するルートとは関係ありません。これはPlayのバグですか? (私は1.2.4を使用しています)?.txtの再生に失敗しました!テンプレートは、.xmlとして動作します
/robots.txtを要求するときは、このエラーメッセージである:
No route found
No route able to invoke action PublicController.sitemap with arguments {} was found.
----------
In /app/views/PublicController/robots.txt (around line 1)
> 1: Sitemap: @@{PublicController.sitemap()}
This exception has been logged with id 69kj6fdbk
これはのrobots.txtの鋳型である:
GET /robots.txt PublicController.robots(format:'txt')
GET /sitemap.xml PublicController.sitemap(format:'xml')
:
Sitemap: @@{PublicController.sitemap()}
これは、関連する経路であります
編集:
これはPlayのバグですbreak
がNoRouteFoundException
につながる
if (!(Http.Request.current() == null ? "" : Http.Request.current().format).equals(route.staticArgs.get("format"))) {
allRequiredArgsAreHere = false;
break;
}
continue;
:私はライン461からActionDefinition Router.reverse(String, Map<String, Object>)
に次を発見しました。逆方向ルーティング中に要求フォーマットをチェックする必要がある理由はわかりません。リバースルーティングはリンクを生成するために使用され、応答などは生成されません。 Controller.redirect(String, boolean, Object...)
はreverse
を使用し、この動作に依存する可能性があるため(HTTPリダイレクトはコンテンツタイプまたは形式を許可することもできます)、リダイレクトに副作用がある可能性があります。とにかく、メインプレイ!テストは私のプレーフォークに合格します。
私はバグレポートhereを提出しました。
PublicController.sitemap()はパラメータをとりません。テンプレートのファイル拡張子を含めて "txt"だったものをすべて "xml"に変更すると、テンプレートは有効なXMLではありませんが、それは機能します。 –
あなたのルートファイルに 'PublicController.sitemap()'が宣言されていますか? –
はい(質問を更新しました)しかし、今や、経路の形式を明示的に設定する必要があるかもしれないことが分かった。なぜなら、すべての "txt"を "html"に変更すると、どちらも機能しないからです。だから私はロボットとサイトマップの両方の形式がXMLなので、 "xml"だけで動作すると思います。だから私はこれがルーターの問題であると信じています。なぜなら、これはうまくいかない理由は何もないからです。私は、それがなければ同じように動作するので、 "secure()"に問題がある可能性も否定しました。 –