OSX Play Framework自动重新加载

时间:2015-06-04 03:38:11

标签: macos playframework docker boot2docker

我已经在互联网上搜索了好几个小时了,有很多“有用的”建议......除了问题之外什么都没有。

这就是我,几乎完全是:

Play framework auto-loading in docker container

我正在运行最新版本(我认为,不知道如何查看,但已下载<一周前)版本的Play!使用Java 8的ubuntu docker容器内的框架,使用以下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
互联网上的

Multiple sources显示相同或类似的问题,并且或多或少会达到相同的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

很明显,一刀切的解决方案已不再适用。从那以后我一直难过。我发现自2.3.x以后任何更改都没有通知会导致此命令无效。相反,我看到things提到“2.3.2之后的作品”,我就是这样。

PS:

任何人都可以解释链接帖子末尾描述的奇怪的Ctrl-D行为。考虑到Ctrl-D应该退出......

,我也遇到了同样的问题

2 个答案:

答案 0 :(得分:1)

好的,更多的网络搜索,我终于崩溃并挖掘了Play!框架github找到他们的测试built.sbt,它碰巧使用了 new 选项。

显然,深入了解移民指南,这是值得注意的。 (花了一些时间回顾一下。)

我的错误显然是在假设2.4.0包含在2.3.2+中,而没有检查隐藏得很好的(在我的拙见)文档中。对于那些在类似情况下遇到绊脚的人,不要再犹豫了:

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

这是播放轮询的新语法,从 2.4.0 开始。检查迁移报告,直到您使用的版本,如果这会导致另一个错误,看看他们是否再次更改了它。

只是想知道,我是否已经疯狂地期待某种This is Deprecated消息被吐出来,而不是盲目地谴责我所做的一切?这似乎是为未来添加的好东西。

答案 1 :(得分: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中,SBT设置键playWatchService已重命名为fileWatchService

相应的班级也发生了变化。要将FileWatchService设置为每两秒轮询一次,请按以下方式使用:

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

摘自:https://www.playframework.com/documentation/2.4.x/Migration24#playWatchService-renamed