распылить развертывание akka на веб-сервере

У меня приложение построено на спрее + ​​акка. используя это руководство:

http://sysgears.com/articles/building-rest-service-with-scala/

Это объясняет этот пример: пример

Приложение работает просто отлично. Но при попытке развернуть на веб-сервере я не нашел способа сделать это.

Я пытался использовать xsbt-web-plugin для развертывания на Tomcat, получил следующий ввод:

 ~container:start

[информация] запуск сервера... Добавление контекста для целевого/веб-приложения...

Запуск службы Tomcat Starting Servlet Engine:

Apache Tomcat/7.0.34 org.apache.catalina.startup.ContextConfig

getDefaultWebXmlFragment INFO: глобальный файл web.xml не найден

org.apache.coyote.AbstractProtocol start INFO: Запуск

Обработчик протокола ["http-nio-8080"]

Но Tomcat возвращает 404 для всех запросов.

Кто-нибудь знает, как я могу развернуть приложение Spray akka на Tomcat?


person griffon vulture    schedule 27.04.2015    source источник
comment
См. этот вопрос, кажется, есть проблема с сервлетом-распылителем, автоматически определяющим путь контекста на tomcat, поэтому вам нужно установить его вручную: stackoverflow.com/questions /29701593/   -  person jrudolph    schedule 27.04.2015
comment
Вы пытались изменить spray.servlet.root-path в своем application.conf?   -  person jrudolph    schedule 27.04.2015
comment
да, помогло, спасибо. теперь моя проблема заключается в том, что определить как ‹servlet-class› в web.xml   -  person griffon vulture    schedule 27.04.2015
comment
@griffonvulture, могу я спросить, почему вы хотите развернуть спрей на веб-сервере (контейнере)? Сам по себе спрей не содержит контейнеров и может быть развернут как исполняемый jar-файл. Вы рассматривали такой вариант? Вы также можете перенаправить свой трафик с веб-сервера на инстанс Spray.   -  person Soumya Simanta    schedule 27.04.2015


Ответы (1)


Решил проблему.

Вот что вам нужно, чтобы xsbt-plugin работал со спреем:

  1. Установите root-path в application.conf

Как указал @jrudolph: спрей-сервлет не знает, как это сделать автоматически на tomcat:

spray.servlet {
   boot-class = "com.sysgears.example.boot.Boot"
   root-path = "/rest"
   request-timeout = 10s
 } 
  1. Измените класс boot на расширение webBoot:

boot.scala

class Boot extends WebBoot {
  // create an actor system for application

  val system = ActorSystem("rest-service-example")

  // create and start rest service actor

  val serviceActor = system.actorOf(Props[RestServiceActor], "rest-endpoint")
}
  1. добавьте web.xml, как описано в xsbt-web-plugin:

    src/main/webapp/WEB-INF/web.xml:

    <listener>
        <listener-class>spray.servlet.Initializer</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>SprayConnectorServlet</servlet-name>
        <servlet-class>spray.servlet.Servlet30ConnectorServlet</servlet-class>
        <async-supported>true</async-supported>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>SprayConnectorServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

For the full change see the comparison on github (The example writer has generously generate this branch for tomcat users)

https://github.com/oermolaev/simple-scala-rest-example/compare/spray-tomcat

person griffon vulture    schedule 28.04.2015
comment
Однако пример давно устарел. Возможно, вам стоит попробовать настроить приложение из официального шаблона на github.com /spray/spray-template/tree/on_jetty_1.3_scala-2.11, который уже содержит все эти файлы и также использует последнюю версию спрея :) - person jrudolph; 28.04.2015