Можно ли развернуть новое .war-приложение, не останавливая его? - PullRequest
5 голосов
/ 03 ноября 2009

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

Ответы [ 5 ]

7 голосов
/ 03 ноября 2009

Вы можете установить два экземпляра 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 в балансировщик-менеджер

И все готово. Для этого вам не нужно несколько физических или виртуальных машин - это также возможно в одной коробке. Если обновление вашего приложения подразумевает изменения базы данных, будьте осторожны. Выше может быть заключено в капсулу, например в сценарии gant , так что простой "grails cluster-redeploy" делает все, что вам нужно. Такой сценарий в настоящее время находится в моем списке, но я не знаю, когда это будет закончено.

4 голосов
/ 15 мая 2012

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

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

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

  • Foo ## 42.war
  • Foo ## 43.war
2 голосов
/ 03 ноября 2009

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

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

1 голос
/ 03 ноября 2009

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

0 голосов
/ 03 ноября 2009

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

...