从Scala控制台调用Play框架应用程序

Min*_*ing 10 scala playframework playframework-2.3

我有一个Play Framework 2.3应用程序.我可以放入Scala控制台activator console.但是,当我尝试从我的应用程序调用代码时,特别是一些使用的帮助函数WS,它使用隐式import play.api.Play.current检索当前正在运行的应用程序,我收到错误消息java.lang.RuntimeException: There is no started application.

我需要采取哪些步骤才能将我的应用加载到当前的控制台会话中?

一个类似的现有问题,但接受的答案似乎是使用框架测试助手的模拟应用程序.最好,我想在我的实际应用程序的上下文中运行.如果我必须使用假的应用程序,是否可以使它与我的开发环境(运行时得到的activator run)相匹配,而不是我的测试环境(运行单元测试时得到的)?

提前致谢!

Sal*_*lem 8

在这种特定情况下,您只需创建一个Application实例并使用它而不是隐式实例:

// Tested in 2.3.7
import play.api.{Play, Mode, DefaultApplication}
import java.io.File
import play.api.libs.ws.WS

val application = new DefaultApplication(
    new File("."),
    Thread.currentThread().getContextClassLoader(),
    None,
    Mode.Dev
)

import scala.concurrent.ExecutionContext.Implicits.global

WS.client(application).url("http://www.google.com").get().map((x) => println(x.body))
Run Code Online (Sandbox Code Playgroud)

  • 为此而言.我需要一个额外的'Play.start(应用程序)`来开始 (2认同)

Cec*_*ile 8

对于未来的读者,Play framework 2.5.x:

import play.api._
val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
val context = ApplicationLoader.createContext(env)
val loader = ApplicationLoader(context)
val app = loader.load(context)
Play.start(app)
Run Code Online (Sandbox Code Playgroud)

资料来源:https: //www.playframework.com/documentation/2.5.x/PlayConsole#Launch-the-interactive-console