【问题标题】:Play Framework sbt-web integration without play plugin无需播放插件的 Play Framework sbt-web 集成
【发布时间】:2016-07-28 23:56:39
【问题描述】:

Embedding play as a library,我在我的项目中启用了 sbt-web 插件,并运行了web-stage,将资产逐字复制到target/web/stage/。但是使用 Play Framework 的string interpolation routing DSL 如下,当匹配请求进来时它们不会被服务:

object PlayServer extends App {
    val server = NettyServer.fromRouter() {   
      case GET(p"/public/$file*") => {
        val path = "/target/web/stage"
        Assets.at(path = path, file = file)
    }
}

通过播放代码handling Assets.at 进行调试,似乎没有任何东西将资产变为target/scala-2.11/classes/ 下的资源,大概是播放框架试图将它们作为资源加载。运行sbt web-stage 并没有特别注意这一点。

那么,sbt-web 管理将资产放在那里缺少什么?当手动放置在那里时,集成工作!因此,就 Play 而言,默认配置中的 sbt-web 似乎将资产放置在错误的目标子目录中......

请注意,在plugins.sbt 中,我仅包含来自 sbt-web 的以下内容,这是否足够?

addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "latest.release")

【问题讨论】:

    标签: playframework sbt-web


    【解决方案1】:

    将资产放在/src/main/resources/assets/ 下会在运行时将它们复制到target,绕过任何花哨的 sbt-web 处理。这使您摆脱了基本开发的泥潭。

    路线需要像这样调整:

    case GET(p"/public/$file*") => {
      val path = "/assets"
      Assets.at(path = path, file = file)
    }
    

    设置适当的 sbt-web 管道用于缩小或最终无法避免的任何事情,因此这并不是真正的答案,但它解决了使用 play 用于内部使用的应用程序的特定用例。

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2014-10-08
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多