2015-03-25 3 views
9

У меня есть приложение Play Framework 2.3. Я могу попасть в консоль Scala с activator console. Однако, когда я пытаюсь вызвать код из своего приложения, в частности, какую-то вспомогательную функцию, которая использует WS, которая использует неявный import play.api.Play.current для извлечения текущего приложения, я получаю сообщение об ошибке java.lang.RuntimeException: There is no started application.Вызов приложения Play Framework с консоли Scala

Какие шаги я должен предпринять, чтобы иметь возможность загружать мое приложение в текущую сессию консоли?

Существует a similar existing question, но принятый ответ, кажется, использует макет приложения из тестовых помощников фреймворка. Предпочтительно, я хотел бы запускать в контексте моего фактического приложения. Если я должен использовать поддельное приложение, можно ли совместить его с моей средой разработки (что я получаю при запуске activator run), а не в моей тестовой среде (что я получаю при выполнении модульных тестов)?

Заранее благодарен!

+0

Какова цель работы таким образом? – cchantep

+0

@cchantep Приятно иметь возможность играть с вещами в REPL. –

+0

Аналогичным образом вы можете использовать 'StaticApplication' http://stackoverflow.com/questions/24435415/access-models-from-console-in-play-framework. Этот вопрос по существу задает одно и то же, за исключением моделей, которым требуется база данных. Общим моментом является то, что они оба требуют неявного приложения. –

ответ

8

В данном конкретном случае вы можете просто создать экземпляр приложения и использовать его вместо неявных один:

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

Спасибо за разъяснение! – Ming

+0

Экономия времени: это не работает в 2.5.4. – asyncwait

+2

Tks для этого. Мне понадобилось дополнительное 'Play.start (приложение)', чтобы идти – wwkudu

Смежные вопросы