【问题标题】:Does Play support separate routes files per environment - dev, uat, prod?Play 是否支持每个环境单独的路由文件 - dev、uat、prod?
【发布时间】:2014-01-09 15:25:55
【问题描述】:

开发模式下是否可以有如下路由:

GET  /       controllers.Assets.at(path="/public/ui/dev", file="index.html")
GET  /*file  controllers.Assets.at(path="/public/ui/dev", file)

以及生产中的以下内容:

GET  /       controllers.Assets.at(path="/public/ui/prod", file="index.html")

【问题讨论】:

    标签: playframework


    【解决方案1】:

    是的,这是可能的。在conf/routes 中声明您的开发路线,但在conf/prod.routes 中声明您的生产路线。然后,有一个生产配置文件,conf/prod.conf,把它放进去:

    include "application.conf"
    
    application.router = "prod.Routes"
    

    现在,当您在生产环境中启动应用程序时,只需使用:

    path/to/myapp/bin/myapp -Dconfig.resource=prod.conf -Dhttp.port=...
    

    【讨论】:

    • 如果两个路由文件都定义了同一个方法的路径(例如GET / controllers.News.foo()),是否可以使用此方法?我收到ReverseNews is already defined as class ReverseNews 编译错误...
    【解决方案2】:

    上述解决方案效果很好,但意味着您正在复制路线,例如routesprod.routes 文件中的非静态资源。

    如果您想保留单个路线文件,可以按照johanandren 建议的方式进行。我非常成功地使用了这个方法,并在https://gist.github.com/drcharris/2e3518b212adfa1b6a7f 上发布了这个方法的要点

    【讨论】:

    【解决方案3】:

    不是开箱即用的。但是对于如何实现相同的功能,您有两个想法:

    • 围绕 Assets.at 编写一个瘦包装器,查看当前环境并以不同方式处理它,然后使用修改后的路径调用 Assets.at
    • 覆盖在全局中如何完成路由,如果您想继续为 prod 和 dev 路由文件使用路由 DSL,这有点难以做到,因为您必须弄清楚如何编译它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多