在网络服务器上喷洒 akka 部署

spray akka deployment on webserver

我有一个基于 spray + akka 构建的应用程序。使用本指南:

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

它解释了这个例子:https://github.com/oermolaev/simple-scala-rest-example

应用程序工作正常。但是当尝试在网络服务器上部署时,我没有找到方法。

我尝试使用 xsbt-web-plugin 在 Tomcat 上部署,得到以下输入:

 ~container:start

[info] starting server ... Adding Context for target/webapp ...

Starting service Tomcat Starting Servlet Engine:

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

getDefaultWebXmlFragment INFO: No global web.xml found

org.apache.coyote.AbstractProtocol start INFO: Starting

ProtocolHandler ["http-nio-8080"]

但是 Tomcat 为所有请求返回 404。

有人知道如何在 Tomcat 上部署 spray akka 应用程序吗?

问题解决了。

这是使 xsbt-plugin 与喷雾应用程序一起工作所需要的:

  1. 在application.conf
  2. 中设置root-path

正如@jrudolph 指出的那样:spray servlet 不知道如何在 tomcat 上自动计算出来:

spray.servlet {
   boot-class = "com.sysgears.example.boot.Boot"
   root-path = "/rest"
   request-timeout = 10s
 } 
  1. 将 class 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>
    

有关完整更改,请参阅 github 上的比较(示例作者已为 tomcat 用户慷慨地生成此分支)

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