2012-05-18 4 views
1

Я бы хотел, чтобы Jetty работал на производственном сервере, и когда у меня появился новый пакет кода для развертывания, я хотел бы иметь возможность сделать «пакет sbt» для упаковки моего кода в военный файл, а затем скопировать он переходит к папке webapp рабочей машины.Стратегия развертывания Jetty и Scala с SBT?

Это разумно? Если да, то какой способ начать Jetty как демон? Будет ли он видеть новый файл и автоматически перезагружать мое приложение или мне нужно его каким-то образом перезапустить?

ответ

2

Основная проблема с тем, что вы предлагаете, заключается в том, что Конфигурация, необходимая для того, чтобы сервер прослушивал или контролировал папку webapps, заключается в том, что будет производственный хит.

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

С учетом этого вы ищете ContextDeployer, который можно настроить в файле jetty.xml. Обратитесь к документации Причала для конкретной версии Jetty для точных деталей:

<!-- =========================================================== --> 
<!-- Configure the context deployer        --> 
<!-- A context deployer will deploy contexts described in  --> 
<!-- configuration files discovered in a directory.    --> 
<!-- The configuration directory can be scanned for hot   --> 
<!-- deployments at the configured scanInterval.     --> 
<!--                --> 
<!-- This deployer is configured to deploy contexts configured --> 
<!-- in the $JETTY_HOME/contexts directory      --> 
<!--                --> 
<!-- =========================================================== --> 
<Call name="addLifeCycle"> 
    <Arg> 
    <New class="org.mortbay.jetty.deployer.ContextDeployer"> 
     <Set name="contexts"><Ref id="Contexts"/></Set> 
     <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set> 
     <Set name="scanInterval">5</Set> 
    </New> 
    </Arg> 
</Call> 

«scanInterval» является то, что говорит серверу отслеживать папку контекстов. Каждые 5 секунд он проверяет, не изменились ли файлы.

Наконец, чтобы начать Jetty как демон, просто использовать сценарии они предоставляют вам в папке/Bin:

./jetty.sh start 

Чтобы остановить Jetty, запустите:

./jetty.sh stop 

и перезапустить Jetty запустите:

./jetty.sh restart 

Опять же, см The Jetty Documentation или The Webtide Website для точного документа для любой версии Jetty, в которой вы работаете. Различные версии могут сильно отличаться с точки зрения настройки сервера.

+4

По моему опыту, перезагрузки контекста всегда несовместимы с памятью и в конечном итоге съедят доступное пространство PermGen в JVM, на котором работает Jetty. Повторный запуск, к сожалению, необходим, по крайней мере, до того, как закончится память. Вы можете иметь дело с простоями перезагрузки, использовать перезапуск перезагрузки за балансировщиком нагрузки или использовать такое решение, как LiveRebel. – brandon

+0

@brandon - Спасибо за разъяснение. Я уже упоминал в своем ответе, что это не рекомендуется для производства, но вы поднимаете действительную точку, что это, возможно, следует выделить еще раз. Обновит мой ответ. – jmort253

+0

+1 для балансировки нагрузки, сохранение производительности и времени безотказной работы, беспроигрышный – virtualeyes

Смежные вопросы