scala playframework playframework-2.3

scala - ¿Cómo configurar la huella digital de activos en Play 2.3.4?



playframework playframework-2.3 (3)

Versiones:

  • jugar 2.3.4
  • sbt 0.13.1
  • Scala 2.11.2

He seguido la documentación en playframework.com para habilitar la toma de huellas dactilares en activos públicos, pero las llamadas a las routes.Assets.versioned nunca producen un nombre de archivo versionado con un hash de resumen.

Líneas relevantes en build.sbt:

scalaVersion := "2.11.2" pipelineStages := Seq(rjs, digest)

Líneas relevantes en project / plugins.sbt:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.4") addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.5") addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0")

Líneas relevantes en conf / rutas:

GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)

Y la plantilla principal:

@(title: String, lang: String, cssClasses: String, bodyContents: Html) <!DOCTYPE html> <html lang="@lang"> <head> <meta charset="UTF-8"> <title>@title</title> <script type="text/javascript" src="@routes.Assets.versioned("javascript/components/main.js")"></script> </head> <body> <div class="layout @cssClasses"> @bodyContents </div> </body> </html>

La salida es siempre:

<!DOCTYPE html> <html lang="el"> <head> <meta charset="UTF-8"> <title>[title]</title> <script type="text/javascript" src="/assets/javascript/components/main.js"></script> </head> <body> ... </body> </html>

No consigo errores de compilación. La huella digital simplemente "no funciona". Supongo que me estoy perdiendo algo simple, pero no puedo verlo.

Otras notas:

  • corriendo find . -name "*.js" find . -name "*.js" en la raíz del proyecto no muestra ningún archivo que tenga un resumen adjunto al principio, como sugiere la documentación
  • He ejecutado sbt clean dist para generar un lanzamiento de modo de producción y el comportamiento es el mismo

¿Alguien puede aconsejar?

¡Gracias!

NB: Comencé a buscar en la clase generada en target/src_managed/main/routes_reverseRouting.scala para depurar el método versioned generado, pero esto parece una exageración para algo que es bastante sencillo.


En primer lugar, debe actualizar a sbt 0.13.5, porque sbt-web y sus complementos usan una característica de sbt llamada "auto-plugins" que se introdujo en 0.13.5.

La canalización de activos no está activada en el modo de desarrollo , por lo tanto, debe realizar la prueba a través de sbt start (o sbt dist pero eso lleva más tiempo).

El método versioned solo verifica si un activo tiene un compañero con el sufijo .md5 . Debe comprobar si estos archivos existen en target/web .


Por lo que puedo recordar, tuve el mismo problema hace un par de semanas. Cambie la ruta del activo a:

GET /web/assets/*file controllers.Assets.versioned(path="/public", file:Asset)

(Vea el " file:Asset " - parece que se requiere " Asset " si recuerdo bien)


Si la tarea rjs de la canalización encuentra algún problema, es posible que la tarea de resumen no funcione correctamente. Por ejemplo, esto sucede cuando no se encuentra el punto de entrada principal predeterminado para rjs:

Error: Error: .../target/web/rjs/appdir/javascripts/main.js does not exist.

En este caso particular, configurar la clave RjsKeys.mainModule en el valor correcto resuelve el problema y los archivos * .js tienen las huellas dactilares adecuadas.