Можно ли развернуть новое приложение .war, не останавливая его?

StackOverflow https://stackoverflow.com/questions/1663757

  •  12-09-2019
  •  | 
  •  

Вопрос

Привет, я новичок в Grails, и мне интересно, как развернуть.Как я могу обновить приложение после развертывания .war в рабочей среде без простоев?

Это было полезно?

Решение

Даже если вы развернете WAR-файл в горячем режиме (не перезапуская сервер), все равно произойдет некоторое время простоя во время перезагрузки контекста.Это не Grails как таковой, а скорее J2EE/сервлет.

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

Другие советы

Вы можете настроить два экземпляра Tomcat с помощью Apache. mod_proxy_balancer перед ним, как описано здесь.Для повторного развертывания приложения может быть применена стратегия «последовательного обновления» (при условии, что app1 и app2 — это ваши два экземпляра Tomcat):

  1. Отключите tomcat@app1 в диспетчере балансировки Apache.
  2. Повторно разверните приложение в tomcat@app1.
  3. Проведите тестирование с помощью app1 и посмотрите, все ли работает.
  4. Включите tomcat@app1 в балансировщике-менеджере.
  5. Отключите tomcat@app2 в балансировщике-менеджере.
  6. Повторно развернуть приложение на tomcat@app2.
  7. Включите tomcat@app2 в балансировщике-менеджере.

И вы сделали.Для этого вам не нужно несколько физических или виртуальных машин — это также возможно на одном компьютере.Если обновление вашего приложения предполагает изменение базы данных, будьте осторожны.Вышеупомянутое может быть инкапсулировано, например.в гантский сценарий, поэтому простое «перераспределение кластера Grails» сделает все, что вам нужно.Такой сценарий сейчас у меня в списке, но я понятия не имею, когда он будет закончен.

Если вы используете Tomcat, это возможно с помощью так называемого параллельного развертывания:

http://tomcat.apache.org/tomcat-7.0-doc/config/context.html#Parallel_deployment

Просто назовите файлы войны номером версии, как описано в документе:

  • foo##42.война
  • фу##43.война

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

Все, что я знаю, это то, что вы можете изменить файл groovy или файл .gsp, и после сохранения изменения будут доступны в браузере, но если есть файлы других типов, я не совсем уверен в этой функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top