2012-03-13 6 views
1

私は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のバグですbreakNoRouteFoundExceptionにつながる

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を提出しました。

答えて

0

エラーメッセージを確認し、それは言う:

No route able to invoke action PublicController.sitemap with arguments {} 

ルートであなたはあなたではなく、いくつかのパラメータを受け取りPublicController.sitemap()のエントリを有することができる

GET /sitemap PublicController.sitemap() 

のようなものが欠けているファイルのことを意味し、それはこの問題を説明するだろう。アップデートの

編集:Maenuはそれらに言及してあなたは、tehのコメントをチェックしていなかった場合には

、問題が異なるフォーマットを持っています。ロボットのコンテンツタイプは "text/plain"であり、 "text/xml"のサイトマップは互換性がありません。

の方法は、ルートからフォーマットを削除し、使用してコントローラでそれを設定しようとするだろう:

renderText(...) 
renderXml(...) 

documentationを参照してください。

+0

PublicController.sitemap()はパラメータをとりません。テンプレートのファイル拡張子を含めて "txt"だったものをすべて "xml"に変更すると、テンプレートは有効なXMLではありませんが、それは機能します。 –

+0

あなたのルートファイルに 'PublicController.sitemap()'が宣言されていますか? –

+0

はい(質問を更新しました)しかし、今や、経路の形式を明示的に設定する必要があるかもしれないことが分かった。なぜなら、すべての "txt"を "html"に変更すると、どちらも機能しないからです。だから私はロボットとサイトマップの両方の形式がXMLなので、 "xml"だけで動作すると思います。だから私はこれがルーターの問題であると信じています。なぜなら、これはうまくいかない理由は何もないからです。私は、それがなければ同じように動作するので、 "secure()"に問題がある可能性も否定しました。 –

関連する問題