Как настроить активацию отпечатков в Play 2.3.4?
Версии:
- play 2.3.4
- sbt 0.13.1
- scala 2.11.2
Я следил за документацией на playframework.com, чтобы активировать отпечатки пальцев на публичных активах, но вызовы routes.Assets.versioned
никогда не приводят имя файла с версией с хэшем дайджеста.
Соответствующие строки в файле build.sbt:
scalaVersion := "2.11.2"
pipelineStages := Seq(rjs, digest)
Соответствующие строки в проекте /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>
Я не получаю ошибок компилятора. Отпечаток пальца просто "не работает". Я предполагаю, что мне не хватает чего-то простого, но я не вижу его.
Другие примечания:
- running
find . -name "*.js"
в корне проекта не отображается файлов с дайджестом, добавленным к началу, так как в документации предлагается
- Я запустил
sbt clean dist
, чтобы сгенерировать выпуск режима производства, и поведение такое же
Кто-нибудь может посоветовать?
Спасибо!
NB: я начал просматривать сгенерированный класс в target/src_managed/main/routes_reverseRouting.scala
для отладки сгенерированного метода versioned
, но это кажется излишним для чего-то довольно простого.
Ответы
Ответ 1
Прежде всего, вы должны обновить до sbt 0.13.5, потому что sbt-web и его плагины используют функцию sbt, называемую "автоматические плагины", которая была введена в 0.13.5.
Конвейер ресурсов, кстати, не запускается в режиме разработки, вам нужно протестировать через sbt start
(или sbt dist
, но это занимает больше времени).
Метод versioned
просто проверяет, имеет ли ресурс компаньон с суффиксом .md5
. Вы должны проверить, существуют ли эти файлы в target/web
.
Ответ 2
Насколько я помню, у меня была такая же проблема несколько недель назад. Измените маршрут ресурса на:
GET /web/assets/*file controllers.Assets.versioned(path="/public", file:Asset)
(см. "file:Asset
" - кажется, что "Asset
" требуется, если я правильно помню)
Ответ 3
Если задача rjs конвейера встречает некоторую проблему, тогда задача дайджеста может работать неправильно. Например, это происходит, когда основная точка входа по умолчанию для rjs не найдена:
Error: Error: .../target/web/rjs/appdir/javascripts/main.js does not exist.
В этом конкретном случае установка ключа sbt RjsKeys.mainModule
в правильное значение решает проблему, а файлы *.js правильно отпечатываются.