2014-09-08 2 views
16

Версии:Как настроить отпечаток актива в Play 2.3.4?

  • игры 2.3.4
  • SBT 0.13.1
  • Скала 2.11.2

Я следовал documentation on 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") 

Соответствующие строки в конф/маршрутов:

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 для создания режима производства и то же самое поведение

Может кто-нибудь посоветуете?

Спасибо!

NB: Я начал изучать сгенерированный класс в target/src_managed/main/routes_reverseRouting.scala, чтобы отладить сгенерированный метод versioned, но это кажется излишним для чего-то довольно простого.

ответ

8

Прежде всего, вы должны обновить до sbt 0.13.5, потому что sbt-web и его плагины используют функцию sbt, называемую «автоматические плагины», которая была введена в 0.13.5.

Трубопровод актив кстати не срабатывает в режиме разработки, вы должны проверить с помощью sbt start (или sbt dist но это занимает больше времени).

Метод versioned просто проверяет, имеет ли объект компаньон с суффиксом .md5. Вы должны проверить, существуют ли эти файлы в target/web.

+1

Я модернизировал, чтобы использовать активатор, который обертывает 0.13.5, и результат тот же. Я вижу файлы .md5, но (1) ни один из javascript не хэширован, и (2) sbt-digest - хэширование прекомпилированных .scss-файлов вместо скомпилированных файлов .css (мы используем плагин sbt-sass - который Я понимаю, может быть причиной проблемы с CSS, но это не должно влиять на javascript). Только правильные хэшированные файлы - это png. – biegel

+0

Активатор использует 0.13.5, но выполняет ли ваш проект? Проверьте 'project/build.properties'. Можете ли вы попробовать без плагина SASS, может быть, это вызывает проблему? –

+1

Это был плагин sass, он был просто исправлен несколько часов назад. Подробнее см. Https://github.com/ShaggyYeti/sbt-sass/pull/13. – biegel

8

Насколько я помню, у меня была такая же проблема несколько недель назад.Изменение маршрута активов к:

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

(См «file:Asset» - это, кажется, что «Asset» требуется, если я правильно помню)

+3

Мы указываем тип 'Asset', но результат тот же – biegel

4

Если Х.С. задача трубопровода встречает какие-то проблемы, то задача дайджеста может работать неправильно. Например, это происходит, когда главная точка входа по умолчанию для RJS не найдена:

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

В данном случае установка SBT ключа RjsKeys.mainModule к правильному значению решает эту проблему и * .js файлы правильно дактилоскопии.

+0

Мы также получали эта ошибка - спасибо за наконечник. – biegel

+0

Спасибо за подсказку! Это разрешило это в моем случае. –