我正在尝试让一个SBT web应用程序在Heroku下运行。我已经能够通过使用JettyLauncher脚本来做到这一点,如下所述http://scalatra.org/2.2/guides/deployment/heroku.html然而,我真的很想从WAR工件中运行,而不是从我的src/main/webapp目录中运行,因为在构建中会进行一些后期处理。
然而,当我尝试使用StartScriptPlugin.startScriptForWarSettings时,我的应用程序在启动时会出错,因为它试图将WAR文件复制到/tmp/build_26wd72c43fv12/target/jetty-distribution-7.3.1.v20110307/webapps
阅读以下内容:https://devcenter.heroku.com/articles/read-only-filesystem,清楚地解释了问题是因为当web dyno运行该脚本时,它无法写入/tmp。
所以我的问题是:有没有办法更改sbt-startscriptplugin中用于Jetty发行版的目录?我已经查看了源代码,使用的是这个"目标"变量,但我从来没有看到它是如何定义的或在哪里定义的。
我发现了两种可能的解决方案:
-
在Jetty启动程序中,您将上下文设置为直接转到使用
context.setWar("target/scala-2.10/mywar_2.10-0.0.1.war")
暂存生成的war文件。在这种情况下,您仍然使用嵌入式Jetty和StartScriptPlugin.startScriptForClassesSettings键运行,但它是从WAR而不是运行的 -
使用Heroku的部署:战争能力:https://devcenter.heroku.com/articles/war-deployment。这对我来说并不奏效,因为这意味着一切都在一个我并不真正理解的环境中运行,而Heroku对此并不支持。