Есть ли простой способ скопировать Scala Jar (~ 1MB) на сервер, а затем использовать SBT в зависимостях (~ 40 МБ), которые ему нужны, и запустить его?
Я видел sbt-onejar и sbt-assembly, но они объединяют все зависимости в одну банку, которая в моем случае становится ~ 45 МБ, что занимает слишком много времени для загрузки на сервер.
В настоящий момент я использую Capistrano для проверки моего кода из GitHub и компиляции его. Затем я запускаю его с помощью xsbt-start- script -plugin - подобно тому, как это управляет Heroku.
Проблема в том, что компиляция занимает много времени на серверах (я использую EC2). EC2 Micro с RAM ~ 600 МБ занимает безумно длинную и иногда случайным образом убивает процесс. Я использую экземпляр EC2 Small (1.7GB ram), который работает на данный момент, но по мере увеличения базы кода и добавления большего количества серверов может возникнуть проблема.
Идеальный рабочий процесс состоял бы в том, чтобы скомпилировать источники Scala локально (или на CI-сервере), скопировать на сервер, добавить SBT дополнительные зависимости, добавленные после последней сборки (существующие из них будут поступать из локального кэшированного реплива плюща), тогда предоставить мне простой script для запуска службы с помощью Upstart на Ubuntu 10.04.
Я также хотел бы услышать, как другие пользователи 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")