Какви са разликите между Play run и start?

Бих искал да разбера разликите между run play start и play run в контекста на проблема по-долу.

Моят конкретен случай на употреба е доста сложен, но ще го опростя така:

  • При стартиране (като част от 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 стартира приложението за игра в режим на разработка.

    Това означава, че се изпълнява от подканата за възпроизвеждане (в рамките на SBT, всъщност), с някаква персонализирана магия за зареждане на класове, която позволява автоматично презареждане на класове, автоматично компилиране на шаблони и т.н. Този персонализиран начин на стартиране на приложението вероятно е това, което пречи на Tomcat да стартиране.

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

    Редактиране: Аз лично не знам кървавите подробности, но всичко се случва в командата play run и програма за презареждане. Изглежда, че е по-документирано в 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