Ming Ming - 17 days ago 5
Scala Question

Calling into Play framework app from the Scala console

I have a Play Framework 2.3 app. I can drop into a Scala console with

activator console
. However, when I try to call into code from my app, specifically some helper function which uses
WS
, which uses the implicit
import play.api.Play.current
to retrieve the currently running app, I get the error message
java.lang.RuntimeException: There is no started application
.

What steps do I have to take to be able to load my app into the current console session?

There is a similar existing question, but the accepted answer appears to be using a mock app from the framework's test helpers. Preferably, I would like to run in the context of my actual app. If I must use a fake app, would it be possible to make it match my development environment (what I get when running
activator run
) rather than my test environment (what I get when running the unit tests)?

Thanks in advance!

Answer

In this specific case you can just create an Application instance and use it instead of the implicit one:

// 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))
Comments