Размещение спрей акка на веб-сервере

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

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

Это объясняет этот пример: https://github.com/oermolaev/simple-scala-rest-example

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

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

 ~container:start

[info] стартовый сервер... Добавление контекста для цели / веб-приложения...

Запуск службы Tomcat Запуск сервлетного двигателя:

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

getDefaultWebXmlFragment ИНФОРМАЦИЯ: Глобальный файл web.xml не найден

org.apache.coyote.AbstractProtocol start ИНФО: запуск

ProtocolHandler ["http-nio-8080"]

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

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

1 ответ

Решение

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

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

  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 / Главный / 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>
    

Для полного изменения смотрите сравнение на github (автор сценария щедро сгенерировал эту ветку для пользователей tomcat)

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

Другие вопросы по тегам