2013-08-13 3 views
5

Я хотел бы разобраться в различиях между запуском игры и запуском игры в контексте проблемы ниже.В чем разница между прогонкой и запуском игры?

Мой конкретный случай использования является довольно сложным, но я упростить это так:

  • При запуске (как часть Global.scala), мое приложение Play делает прямой вызов метода к записи точка приложения Java X.
  • В рамках своей инициализации X запускает встроенный экземпляр Tomcat.
  • В конце инициализации X он проверяет, что Tomcat встает и отвечает на запросы.

Теперь, когда я делаю play start в этом приложении, Tomcat запущен, X счастлив, и жизнь продолжается.

Однако, когда я делаю play run, Tomcat не может инициализироваться, и X сидит там, ожидая ответа, в конечном итоге выйдет из строя.

Основная причина, по которой мне нужно использовать play run, предназначена для разработки, так как я хотел бы приложить отладчик Eclipse для запуска, выполнив play debug run.

Я понимаю, что это упрощение, но то, что я надеюсь получить от вас, ведет к различиям между Play Run и Play start, которые могут повлиять на поведение моего приложения, что приводит к этой ошибке.

Теперь я попытался увеличить количество потоков в потоковом пуле Play по умолчанию после http://www.playframework.com/documentation/2.1.x/ThreadPools, но не повезло.

Результаты воспроизведения и журналы не дают мне полезной информации по этой проблеме.

Я использую Play 2.1.1

ответ

8
  • play run запускает приложение воспроизведения в режиме развития.

    Это означает, что он запускается из командной строки (в пределах SBT, действительно), с помощью некоторой специальной магии загрузчика классов, позволяющей автоматически перезагружать классы, автоматически компилировать шаблоны и т. Д. Этот настраиваемый способ запуска приложения, вероятно, что предотвращает запуск Tomcat.

    Без каких-либо выходных данных журнала или следов стека из Tomcat, трудно сказать гораздо больше о том, почему Tomcat не запускается. Это немного похоже на запуск Tomcat в другом контейнере, который обеспечивает изоляцию через пользовательские загрузчики классов (например, Tomcat).

    Edit: Я не знаю, окровавленные детали сам, но все это происходит в the play run command и reloader. Кажется, more documented у мастера, хотя я не знаю, изменились ли между 2.1.x и 2.2.x.

  • play start является интерактивным способом запуска приложения в режиме производства.

    Это означает, что он полностью идентичен вызову java -cp [...] YourMainClass, за исключением того, что он запускается интерактивно из приглашения на игру (требуется отсоединить от Ctrl+D), а не в фоновом режиме (и как таковой он не подходит для автоматического развертывания).

Однако для реального производства, вы должны подготовить автономную версию с play dist команды, а затем запустить его с помощью прилагаемого сценария, как описано in the documentation.

+0

Спасибо @gourlaysama, это полезно, и я хотел бы углубиться в магию, которая происходит внутри sbt. Вы упомянули загрузчика классов, возможно, именно здесь проблема. Вы знаете, где я могу найти более подробную информацию об этом? Как я уже упоминал, журналы Tomcat, похоже, не предлагают каких-либо полезных деталей, но мы не можем исключать, что это как-то терпит неудачу. –

+1

Я не знаю, зарегистрировано ли это где угодно (вне самого источника) ... Я добавил ссылки на то, где происходит волшебство, см. Редактирование. – gourlaysama

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