0

将 play 作为库嵌入,我在我的项目中启用了 sbt-web 插件,并运行web-stage,使资产逐字复制到target/web/stage/. 但是,使用 Play Framework 的字符串插值路由 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)
    }
}

通过播放代码处理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")
4

1 回答 1

0

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

路线需要像这样调整:

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

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

于 2016-04-08T21:35:52.113 回答