2015-06-04 2 views
3

Я часами чистил интернет, есть много «полезных» советов ... которые не вызывают ничего, кроме проблем.OSX Play Framework Auto-Reload

Это я, почти точно:

Play framework auto-loading in docker container

Я бегу последнее (я думаю, не знаю, как проверить, но скачал < неделю назад) версию игры! Framework внутри Ubuntu Docker контейнер с Java 8, построенный со следующим dockerfile:

FROM ubuntu:latest 
MAINTAINER [REDACTED] 
RUN sudo apt-get update 
RUN sudo apt-get -y install software-properties-common 
RUN sudo apt-add-repository ppa:webupd8team/java 
RUN sudo apt-get update 
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections 
RUN sudo apt-get -y install oracle-java8-installer 
RUN java -version 

Multiplesources через Интернет показывают одни и те же или аналогичные вопросы, и более или менее прийти в то же conclusion. Я начинаю свою игру следующим образом:

Я не собираюсь повторять то, что связано выше, это в основном идентичная ситуация. (Изменения файла обнаружены, он показывает компиляцию, хотя веб-страница не отражает изменений.) Кроме того, я проверяю правильный компилятор, декомпилируя сгенерированные файлы .class, он показывает правильный код.

Теперь, когда я говорю волшебные слова: Добавление следующей строки в мой файл build.sbt

PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value) 

Я получаю общую build.sbt из:

name := """cms-work""" 

version := "1.0-SNAPSHOT" 

retrieveManaged := true 

lazy val root = (project in file(".")).enablePlugins(PlayJava) 

scalaVersion := "2.11.6" 

libraryDependencies ++= Seq(
    javaJdbc, 
    cache, 
    javaWs 
) 

// Play provides two styles of routers, one expects its actions to be injected, the 
// other, legacy style, accesses its actions statically. 
routesGenerator := InjectedRoutesGenerator 

// Polling for auto-reload, because networked filesystem. 
PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value) 

Запуск ./activator в моем каталог проекта заставляет его повторно оценить мой файл сборки и создать следующее:

/root/cms-work/build.sbt:23: error: value playWatchService is not a member of object play.sbt.Play.autoImport.PlayKeys 
PlayKeys.playWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value) 
     ^
[error] Type error in expression 

As очевидно, решение одного размера подходит для всех уже не применимо. С тех пор я был в тупике. Я не обнаружил абсолютно никакого уведомления о каких-либо изменениях с 2.3.x, что сделало бы эту команду недействительной. Вместо этого я вижу things, в котором упоминаются «работы после 2.3.2», которые я есть.

PS:

Может кто-нибудь объяснить странное поведение Ctrl-D, описанной в конце связанного поста. Я испытываю то же самое, кажется очень странным, учитывая тот факт, что Ctrl-D должен выйти ...

ответ

1

Хорошо, больше интернет-чистки, и я, наконец, сломался и прорыл игру! Framework github, чтобы найти их test built.sbt, который, случается, использовал новый вариант.

Видимо, погруженный глубоко в путеводитель по миграции, это было отмечено. (Мне потребовалось некоторое время, чтобы ретроспективно найти его.)

Моя ошибка, по-видимому, заключалась в том, что 2.4.0 был включен в 2.3.2+ без проверки хорошо скрытой (по моему скромному мнению) документации. Для всех, кто приходит спотыкаясь наряду с подобной ситуацией, не смотреть дальше:

PlayKeys.fileWatchService := play.sbtplugin.run.PlayWatchService.sbt(pollInterval.value) 

Это новый синтаксис для воспроизведения опроса, по состоянию на 2.4.0. Проверьте отчеты о миграции до версии, которую вы используете, если это вызывает другую ошибку, чтобы увидеть, изменили ли они ее снова.


Просто интересно, я с ума, чтобы ожидать какой-то This is Deprecated сообщение было выплюнуть, а не просто слепое осуждение всего, что я сделал? Это похоже на то, что было бы неплохо добавить в будущее.

1
error: value playWatchService is not a member of object play.sbt.Play.autoImport.PlayKeys 

error: object sbtplugin is not a member of package play 

В Playframework 2.4.x, СБТ установка ключ playWatchService был переименован в fileWatchService.

Также изменился соответствующий класс. Для того, чтобы установить FileWatchService опрашивать каждые две секунды, использовать его как это:

scala PlayKeys.fileWatchService := play.runsupport.FileWatchService.sbt(2000) 

Выдержки из: https://www.playframework.com/documentation/2.4.x/Migration24#playWatchService-renamed