播放2.0路由文件以用于不同的配置

时间:2013-09-08 11:29:33

标签: configuration playframework routes playframework-2.0

我有一个包含3种不同配置的Play 2.0应用程序(application.conf,test.conf和prod.conf)

现在我有一个robots.txt文件,应该只为test.conf提供,对于其他环境,如果有人试图访问它,它应该给出404。

如何配置路由文件以检查我的应用程序是否使用test.conf?我可以在test.conf中设置一些我可以在路由文件中查看的变量吗?

这样的东西? (伪代码)

#{if environment = "test"}
GET     /robots.txt                 controllers.Assets.at(path="/public", file="robots.txt")
#{/if}
#{else}
GET     /robots.txt                 controllers.Application.notFoundResult()
#{/else}

1 个答案:

答案 0 :(得分:1)

您无法在routes文件中添加逻辑。

我会写一个控制器来提供robots.txt文件。像这样:

routes文件中:

GET /robots.txt   controllers.Application.robots

然后,在控制器中,我将测试我是否在测试环境中:

def robots = Action {
    if (environment == "test") { // customize with your method
      Redirect(routes.Assets.at("robots.txt"))    
    } else {
      NotFound("")
    }
}

我正在使用Scala,但它可以很容易地翻译成Java。

编辑--java示例

您可以检查应用是否处于以下三种状态之一:proddevtest,即返回当前状态的简单方法:

private static String getCurrentMode() {
    if (play.Play.isTest()) return "test";
    if (play.Play.isDev()) return "dev";
    if (play.Play.isProd()) return "prod";
    return "unknown";
}

你可以用作:

play.Logger.debug("Current mode: "+ getCurrentMode()); 

当然,在你的情况下,这足以直接使用这些条件:

public static Result robots() {
    return (play.Play.isProd())
            ? notFound()
            : ok("User-agent: *\nDisallow: /");
}