Play是否支持每个环境单独的路由文件 - dev,uat,prod?

时间:2014-01-09 15:25:56

标签: playframework

是否可以在开发模式下进行以下路由:

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")

3 个答案:

答案 0 :(得分:9)

是的,这是可能的。在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=...

答案 1 :(得分:1)

上面的解决方案运行良好,但意味着您正在复制路由,例如您的routesprod.routes文件中的非静态资源。

如果您想保留单个路线文件,可以沿着johanandren建议的路走。我非常成功地使用了这种方法,并在https://gist.github.com/drcharris/2e3518b212adfa1b6a7f

发布了这个方法的要点

答案 2 :(得分:0)

没有开箱即用。但是在这里你有两个关于如何实现相同功能的想法:

  • 在Assets.at周围写一个瘦包装器,查看当前的env并以不同方式处理它,然后只用调整后的路径调用Assets.at
  • 覆盖了如何在Global中完成路由,如果你想继续使用路由DSL来做prod和dev路由文件,这有点难以做到,因为你必须弄清楚它们是否已经编译好了