版本:
我已按照documentation on playframework.com启用了对公共资源的指纹识别,但对routes.Assets.versioned
的调用从不会产生带有摘要哈希的版本化文件名。
build.sbt中的相关行:
scalaVersion := "2.11.2"
pipelineStages := Seq(rjs, digest)
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")
conf / routes中的相关行:
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
主要模板:
@(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>
输出始终为:
<!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>
我没有编译错误。指纹只是“不起作用”。我想我错过了一些简单的东西,但我看不到它。
其他说明:
find . -name "*.js"
显示没有文件在开头附加了摘要,正如文档所示sbt clean dist
来生成生产模式版本并且行为相同有人可以提供建议吗?
谢谢!
注意:我已经开始查看target/src_managed/main/routes_reverseRouting.scala
中生成的类来调试生成的versioned
方法,但这看起来有点过分了。
答案 0 :(得分:8)
首先,您应该更新到sbt 0.13.5,因为sbt-web及其插件使用0.13.5中引入的名为“auto-plugins”的sbt功能。
资产管道不是在开发模式中触发的,您必须通过sbt start
(或sbt dist
进行测试,但需要更多时间)。
versioned
方法仅检查资产是否具有.md5
后缀的随播广告。您应该检查这些文件是否存在于target/web
。
答案 1 :(得分:8)
据我所知,几个星期前我遇到了同样的问题。将资产路线更改为:
GET /web/assets/*file controllers.Assets.versioned(path="/public", file:Asset)
(请参阅&#34; file:Asset
&#34; - 如果我没记错的话,似乎需要&#34; Asset
&#34;
答案 2 :(得分:4)
如果管道的rjs任务遇到一些问题,那么摘要任务可能无法正常工作。例如,当找不到rjs的默认主入口点时会发生这种情况:
Error: Error: .../target/web/rjs/appdir/javascripts/main.js does not exist.
在这种特殊情况下,将sbt键RjsKeys.mainModule
设置为正确的值可以解决问题,* .js文件可以正确指纹识别。