2015-03-25 11 views
9

Mam aplikację Play Framework 2.3. Mogę wpaść do konsoli Scala z activator console. Jednak gdy próbuję wywołać kod z mojej aplikacji, a konkretnie niektóre funkcje pomocnicze, które używają WS, która używa niejawnego import play.api.Play.current do pobierania aktualnie uruchomionej aplikacji, pojawia się komunikat o błędzie java.lang.RuntimeException: There is no started application.Wywoływanie do aplikacji ramowej Play z konsoli Scala

Jakie kroki muszę podjąć, aby móc wczytać moją aplikację do bieżącej sesji konsoli?

Istnieje a similar existing question, ale przyjęta odpowiedź wygląda na to, że używa się fałszywej aplikacji z pomocników testowych frameworka. Najlepiej, bym działał w kontekście mojej rzeczywistej aplikacji. Jeśli muszę użyć fałszywej aplikacji, czy byłoby to możliwe, aby pasowało do mojego środowiska programistycznego (co otrzymuję podczas uruchamiania activator run) zamiast do mojego środowiska testowego (co otrzymuję podczas uruchamiania testów jednostkowych)?

Z góry dziękuję!

+0

Jaki jest cel biegania w taki sposób? – cchantep

+0

@ccelep To miło móc bawić się rzeczami w REPL. –

+0

Podobnie, możesz użyć 'StaticApplication' http://stackoverflow.com/questions/24435415/access-models-from-console-in-play-framework. To pytanie zadaje w zasadzie to samo, z wyjątkiem modeli, które wymagają bazy danych. Powszechnie uważa się, że oba wymagają niejawnej aplikacji. –

Odpowiedz

8

W tym konkretnym przypadku można po prostu utworzyć instancję aplikacji i używać go zamiast niejawnego jednym:

// 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)) 
+0

Dzięki za wyjaśnienie! – Ming

+0

Time Saver: To nie działa w wersji 2.5.4. – asyncwait

+2

Tks za to. Potrzebowałem dodatkowego 'Play.start (aplikacja)', aby zacząć – wwkudu

Powiązane problemy