В чем разница между Play run и start?

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

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

  • При запуске (как часть 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


person Alejandro Lujan    schedule 13.08.2013    source источник


Ответы (1)


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

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

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

    Изменить: я сам не знаю кровавых подробностей, но все это происходит в команда запуска воспроизведения и перезагрузчик. Кажется, это больше документировано в master, хотя я не знаю, изменилось ли что-то между 2.1.x и 2.2.x.

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

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

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

person gourlaysama    schedule 13.08.2013
comment
Спасибо, @gourlaysama, это полезно, и я хотел бы глубже погрузиться в магию, которая происходит внутри sbt. Вы упоминаете загрузчик классов, возможно, проблема именно в этом. Вы знаете, где я могу найти более подробную информацию об этом? Как я уже упоминал, журналы Tomcat, похоже, не содержат каких-либо полезных деталей, но мы не можем исключать, что он каким-то образом незаметно выходит из строя. - person Alejandro Lujan; 13.08.2013
comment
Я не знаю, задокументировано ли это где-нибудь (кроме самого источника)... Я добавил ссылки на то, где происходит волшебство, см. редактирование. - person gourlaysama; 13.08.2013