Какая лучшая стратегия развертывания Playframework 1.x?

Я разработал небольшое приложение, основанное на Play Framework (я все еще изучаю). Теперь мне нужно связать его для доставки. Один из способов - создать военный файл и развернуть его в контейнере сервлетов, таком как tomcat. Это очень ясно из документов. Другой вариант - использовать встроенный HTTP-сервер. Это то, что я хочу сделать, так как это рекомендуется.

Теперь, как я могу удалить приложение из моего приложения для разработки, чтобы я мог его развернуть на производственный сервер - я имею в виду, как мне скомпилировать и создать пакет, который может быть распространен среди моего клиента, который сделает что-то вроде разархивирования дистрибутивный парк и запустить script, чтобы запустить сервер?

Или я так выразился, мне нужно установить игровой путь на моем рабочем сервере, а затем скопировать мои файлы проекта на производственный сервер, чтобы мой пользователь мог запустить его с помощью play-run, как я это делал в своей разработке Окружающая среда?

Документы говорят только, что мне нужно перейти в режим производства.

Ответ 1

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

Я имею в виду, как я компилирую и создаю пакет, который может быть клиент, который сделает что-то вроде разархивировать распределительный парк и запустить a script, чтобы запустить сервер?

Ну, это точно, для чего нужен военный файл. Если вы хотите, чтобы автоматическое развертывание было IMHO, не было никакого способа обойти военный файл. С другой стороны, вам не нужна платформа на вашем производственном сервере при создании военного файла. Вы можете убить войну войной за игру и распространить ее на ваш производственный сервер (если это кошка), используя плагин maven tomcat.

Ответ 2

Позвольте мне рассказать несколько вещей. Не обязательно неправильно, но, конечно, неточно:

Вам определенно нужно играть в переменную среды

Нет, вы этого не делаете. Игра идет в виде папки, содержащей кучу скриптов. Все потребности в играх - это Java и JAVA_HOME. Я даже думаю, вы можете определить Java через командную строку. Вы можете назвать игру абсолютным путем без переменной окружения. Например, вы даже можете доставить рамки по приложению.

Если вы хотите автоматического развертывания, IMHO не имеет никакого отношения к файлу WAR.

Некорректное. Я использую автоматическое развертывание для всех своих игровых приложений через Hudson/Jenkins, и я не использую WAR. Приложение Play - это не что иное, как папка, содержащая источники Java и файлы конфигурации. Вы можете упаковать их как ZIP/TAR/RAR/любой формат, который вы хотите, и использовать сценарии для их запуска/установки.

С другой стороны, вам не нужна Framework на вашем производственном сервере при создании WAR файла.

Неверно, так как команда play war на самом деле связывает всю структуру в WAR. Таким образом, у вас все еще есть это, просто он включен в вашу WAR и не установлен где-то на вашем сервере.

Далее, как обсуждалось здесь, лучшей стратегией развертывания для игры является использование ее автономной конфигурации причала. IMHO, Tomcat следует использовать в крайнем случае и/или только при наличии законных оснований для этого.

EDIT: ссылочный question предлагает использовать автономный Jetty только в этом конкретном случае (в качестве замены Tomcat). Если это вариант для вас, стратегия BEST для развертывания - это тот же HTTP-сервер, который поставляется вместе с Play! (он основан на Jboss Netty). Зачем? Он не использует API Servlet и, следовательно, не имеет ограничение потока на запрос - это позволяет играть! чтобы сделать некоторые умные трюки с асинхронным IO (продолжением Play!), подробнее см. этот поток.

Примечание: хотя Jetty/Tomcat поддерживает также асинхронный ввод-вывод, они поддерживают его через собственные собственные API-интерфейсы - если вы упаковываете свою Play! приложение как WAR, оно не использует преимущества этих API. Итак, если вы упаковали свое приложение, WAR была готова увидеть много потоков, сидящих без дела на сервере. Async IO был стандартизован с помощью Servlet API 3.0 и Play! 2.0 воспользуется этим. Между тем, ваш лучший вариант - придерживаться встроенного сервера.