在网络服务器上喷洒 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 与喷雾应用程序一起工作所需要的:
- 在application.conf
中设置root-path
正如@jrudolph 指出的那样:spray servlet 不知道如何在 tomcat 上自动计算出来:
spray.servlet {
boot-class = "com.sysgears.example.boot.Boot"
root-path = "/rest"
request-timeout = 10s
}
-
将 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")
}
添加 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
我有一个基于 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 与喷雾应用程序一起工作所需要的:
- 在application.conf 中设置
root-path
正如@jrudolph 指出的那样:spray servlet 不知道如何在 tomcat 上自动计算出来:
spray.servlet {
boot-class = "com.sysgears.example.boot.Boot"
root-path = "/rest"
request-timeout = 10s
}
-
将 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")
}
添加 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