【问题标题】:Play framework implicit application in scope在范围内播放框架隐式应用
【发布时间】:2015-11-25 00:11:14
【问题描述】:

我刚开始使用 sbt-multi 项目。但是我遇到了以下问题:

Application.scala:16: You do not have an implicit Application in scope. If you want to bring the current running Application into context, just add import play.api.Play.current

此行包含:if (Play.isDev) {,可在此处查看:https://github.com/dataplayground/twitterPipeline/blob/master/modules/frontend/app/controllers/Application.scala

问题是:即使我确实导入了它,仍然有一个新错误告诉我找不到Play

上下文: 我想使用 Angular 设置一个简单的网络套接字。

编辑:

您好,非常感谢。这部分似乎有效。但是我在其他方法中也需要这个变量。如果我将它添加到类的整个范围中,我会收到以下错误

Exception in thread "main" java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
[error]     at play.core.server.ServerStartException.<init>(ServerStartException.scala:10)
[error]     at play.core.server.ProdServerStart$.createPidFile(ProdServerStart.scala:127)
[error]     at play.core.server.ProdServerStart$.start(ProdServerStart.scala:45)
[error]     at play.core.server.ProdServerStart$.main(ProdServerStart.scala:27)
[error]     at play.core.server.ProdServerStart.main(ProdServerStart.scala)
java.lang.RuntimeException: Nonzero exit code returned from runner: 1
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last twitterPipeline/compile:run for the full output.
[error] (twitterPipeline/compile:run) Nonzero exit code returned from runner: 1. 

如果我尝试手动将其添加到第二种方法中

def socket = WebSocket.acceptWithActor[String, String] {
    implicit val app = play.api.Play.current
    request => out =>
    AnalysisActor.props(out)
  }

我从上面收到错误。

【问题讨论】:

  • 您是在 IDE 中遇到此错误还是使用 activator 进行编译?
  • 是的,它在带有激活器的命令行上

标签: playframework sbt multi-project


【解决方案1】:

您需要 Application 在隐式范围内。以下将起作用。

class Application extends Controller {
  implicit val app = play.api.Play.current

  def index = Action {
    val javascripts = {
      if (Play.isDev) {
        // Load all .js and .coffeescript files within app/assets
        Option(Play.getFile("app/assets")).
          filter(_.exists).
          map(findScripts).
          getOrElse(Nil)
      } else {
        // Concated and minified by UglifyJS
        "concat.min.js" :: Nil
      }
    }

    Ok(views.html.index(javascripts))
  }


  def socket = WebSocket.acceptWithActor[String, String] { 
    request => out =>
      AnalysisActor.props(out)
    }

}

【讨论】:

  • 嗨,非常感谢 - 这部分似乎有效。有关问题的详细信息,请参阅我上面的编辑。
  • WebSocket.acceptWithActor 采用隐式参数Application。见编辑。
  • 我不能再帮你了,因为你的 github 项目不包括AnalysisActor。这也可能完全不相关。
  • 我推了分析演员。这只是一个非常简单/基本的演员开始。它基于聊天示例。
  • 你是如何配置你的路由的?
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2015-12-17
相关资源
最近更新 更多