Назад | Перейти на главную страницу

Невозможно автоматически развернуть войну в Tomcat

Я пробовал эту штуку последние 3 часа и ничего. Мне нужно отбросить новую войну и настроить автоматическое развертывание Tomcat. Этого не происходит. Вот моя упрощенная конфигурация:

server.xml

<Engine name="Catalina" defaultHost="localhost">
  <Host name="something.com" appBase="/var/www/something.com/webapps"
        unpackWARs="false" autoDeploy="true" 
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="application.war" debug="0" reloadable="true">
      ... some realm and data source stuff here
    </Context>
  </Host>
</Engine>

Когда я запускаю tomcat, все работает отлично. Я пробовал два подхода:

  1. Скопируйте новую войну с помощью scp в локацию.
  2. Трогательно /var/www/something.com/webapps/application.war.

В обоих случаях я вижу catalina.err с тем же сообщением:

INFO: Undeploying context [/application]

Без соответствующего

INFO: Deploying web application archive application.war

который я получаю, когда перезапускаю tomcat. У меня такое ощущение, что это не внутри CATALINA_BASE/webapps но не знаю, что делать дальше. Любая помощь?

Это могло быть несколько вещей. Некоторые конкретные проблемы, с которыми я столкнулся:

(1) Права доступа к файлам. Убедитесь, что каталог webapps, ваш рабочий каталог, сама война и любые специальные файлы, к которым он обращается, доступны для чтения / записи пользователю, запускающему Tomcat (в идеале они должны принадлежать этому пользователю).

(2) Предыдущая версия удалена не полностью. Попробуйте остановить Tomcat, удалить войну и соответствующую папку, скопировать новую войну, а затем запустить Tomcat. Если это сработает, проблема может быть связана с файлами. (Например, у меня есть приложение, которое не очищается полностью).

(3) Приложение может не инициализироваться должным образом из-за проблем с приложением. Если война автоматически развертывается в папке, автоматическое развертывание работает, но приложение не полностью инициализировано. Ищите сообщения журнала. В зависимости от вашего приложения это может быть tomcat / logs, текущий каталог или стандартный каталог. По возможности измените свойства журнала (например, файл log4j.properties), чтобы отображать сообщения уровня отладки.

(4) Пермские проблемы памяти. Когда вы перезагружаете приложение в Tomcat, оно использует память Permgen. По определению, это невозможно восстановить. Перезагрузите слишком много, и Tomcat выйдет из строя с ошибкой нехватки памяти (обычно вы можете увидеть это в своих журналах). Либо настройте больше permgen, либо, что еще лучше, отключите / перезапустите Tomcat при повторном развертывании приложения.

http://wiki.apache.org/tomcat/OutOfMemory

Я думаю виноват unpackWARs="false"

Из недавняя публикация в stackoverflow, было обнаружено, что unpackWARs="false" приводит к тому, что новая версия WAR не обнаруживается. По какой-то конкретной причине false?

Не должно быть docBase="application" не docBase="application.war"? Если я правильно понимаю, это заставит Tomcat сначала искать папку /var/www/something.com/webapps/application/ и если этого не существует, ищите /var/www/something.com/webapps/application.war

Если вы используете maven, в pom.xml вы можете установить тег, например

<properties>
    <local.tomcat.autodeploy.folder>//pathtoTomcatWebapp folder</local.tomcat.autodeploy.folder>
            <local.build.finalName>nameOfContext</local.build.finalName>
            <localonly>true</localonly>

        <dev.tomcat.autodeploy.folder>specify location</dev.tomcat.autodeploy.folder>
        <dev.build.finalName>nameOfContext</dev.build.finalName>


</properties>

Хотя это старая ветка, я просто хотел указать на одну вещь. В среде IDE щелкните правой кнопкой мыши сервер, найдите расположение серверов и выберите «Использовать установку Tomcat». Это возьмет под контроль установленное место и приведет к войне.

Я столкнулся с этой проблемой в официальном контейнере докеров Tomcat. С участием

<Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">

в моем server.xml всякий раз, когда я копировал файл * .war в папку appBase, он мог обнаруживать и отображать на странице Manager, но не мог его развернуть. После нажатия кнопки «Пуск» он был развернут, но это не цель. Из Tomcat HowTos в официальной документации в разделе «Развертывание на работающем сервере Tomcat» я получил и попробовал скопировать развернутую форму моего военного файла в папку appBase, и это сработало. Я до сих пор не могу понять, почему он не может взорвать файл войны в autoDeploy и unpackWARs верны. Но предоставление ему и распакованного файла war (в разобранном виде) похоже на помощь серверу tomcat в его развертывании. Вот моя командная строка, чтобы скопировать ее в контейнер докера:

docker cp "D: \ MyMavenProject \ target \ MyProject-0.0.1-SNAPSHOT \" tomcat_srvr: /usr/local/tomcat/webapps/MyProject-0.0.1-SNAPSHOT

tomcat_srvr - это имя моего контейнера Tomcat Docker.

Надеюсь, это поможет другим;