【问题标题】:Play 2.0 routes file for different configurations播放不同配置的 2.0 路由文件
【发布时间】:2013-09-08 22:35:00
【问题描述】:

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

现在我有一个 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}

【问题讨论】:

    标签: configuration playframework routes playframework-2.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 示例

    您可以检查应用程序是否处于以下三种状态之一:prod、dev 或test,即返回当前状态的简单方法:

    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: /");
    }
    

    【讨论】:

    • 什么是Play.current.mode,如何将其设置为“测试”?或任何其他任意值(如“Staging”)?
    • 我编辑了我的答案。 Play.current.mode 用于检查 Play 是否在 Dev、Prod 或 Test 模式下启动(即,play run、play start 或 play test)。
    • 在哪里可以了解有关这些模式的更多信息?以及何时以及如何使用它们?例如模式 test 似乎运行 JUnit 测试(但实际上并不运行 Play 服务器)所以我无法定义检查 test 的操作...
    • 这些是内置模式。我认为它们不符合您的需要。忘记这些,并创建自己的方法来检查您所在的环境,如我编辑的答案中所述。
    • @biesior 感谢您的补充,尽管您的建议对我没有帮助,因为 isTest() 仅在运行单元测试时才成立。我通过在 conf 文件中创建自己的属性来解决它,比如 test.conf 有一个名为 env=test 的属性,prod.conf 有 env=prod 所以我可以在运行时检查这个属性...
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 2012-01-16
    • 2015-03-28
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多