Reputation: 1693
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!
Upvotes: 10
Views: 1648
Reputation: 1755
For future readers, for 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)
Source: https://www.playframework.com/documentation/2.5.x/PlayConsole#Launch-the-interactive-console
Upvotes: 8
Reputation: 12986
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))
Upvotes: 8