【发布时间】:2012-01-24 03:24:07
【问题描述】:
有没有一种简单的方法可以将 Scala Jar (~1MB) 复制到服务器,然后让 SBT 提取它需要的依赖项 (~40MB) 并运行它?
我见过 sbt-onejar 和 sbt-assembly,但是它们将所有依赖项捆绑到一个 jar 中,在我的情况下变成了 ~45MB,上传到服务器需要很长时间。
目前我使用 Capistrano 从 GitHub 签出我的代码并进行编译。然后我使用 xsbt-start-script-plugin 运行它 - 类似于 Heroku 的管理方式。
问题是在服务器上编译需要很长时间(我使用的是 EC2)。具有约 600MB ram 的 EC2 Micro 需要非常长的时间,有时会随机终止该进程。我正在使用目前正在运行的 EC2 小型实例(1.7GB 内存),但随着代码库的增加和我添加更多服务器,它可能会出现问题。
理想的工作流程是在本地(或在 CI 服务器上)编译 Scala 源代码,复制到服务器,让 SBT 拉入自上次构建以来添加的其他依赖项(现有的将来自本地缓存的 ivy 存储库),然后提供给我使用简单的脚本在 Ubuntu 10.04 上使用 Upstart 运行服务。
我也想听听其他 Scala 用户如何部署他们的代码。
(来自“答案”的代码稍后由 OP 发布)
FWIW 这是我的构建文件。
build.sbt
import com.typesafe.startscript.StartScriptPlugin
name := "XXX"
version := "0.1.0"
scalaVersion := "2.9.1"
resolvers += "XXX" at "http://repo.XXX.XXX"
libraryDependencies += "XXXX" %% "backend" % "0.1.0"
seq(StartScriptPlugin.startScriptForJarSettings: _*)
mainClass in Compile := Some("XXX.app.Main")
项目/build.sbt
resolvers += Classpaths.typesafeResolver
addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.5.0")
addSbtPlugin("com.eed3si9n" % "sbt-dirty-money" % "0.0.1")
【问题讨论】:
标签: scala deployment jar sbt