what - scala web framework
¿Cómo implementar mi API de spray en producción? (3)
Debes construir un jar con el plugin sbt-assembly
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.0")
Luego puedes ejecutar el jar en producción con java -jar.
Si le asigna un número de versión a su proyecto, este es un proceso bastante clásico.
Espero eso ayude.
Estoy pensando en cómo debería ser el proceso para implementar mi API de descanso ya probada localmente en la nube, digamos una infraestructura como un servicio (no una plataforma como un servicio como Heroku) como Amazon.
Tengo mi entorno local configurado con sbt en marcha, pero mi pregunta es ¿Cómo debo implementar esto en un entorno de producción?
¿Es sensato definir un proceso en el que los devops extraiga los cambios más recientes del repositorio de git y luego simplemente ejecute sbt run?
Quiero saber cómo los equipos que usan scala + spray + sbt implementan sus API en un entorno de producción.
Nunca fui a PRO con spray-akka. Solo proyectos de mascotas. Mis sugerencias aquí deben ser tomadas como inspiración. Sé que algunas de las opciones que presento son costosas en términos de mantenimiento o propensas a errores.
embalaje
Solo usé el plug-in de maven-shade (sin experiencia con sbt) pero creo que hay una solución similar.
Problemas de embalaje
Sin embargo, hay pocos problemas con este enfoque. Akka y muchos de los módulos de rociado utilizan las convenciones references.conf y application.conf Al ensamblar / sombrear todas sus dependencias, los recursos (ya que tienen el mismo nombre) pueden sobrescribirse y no podrá iniciar la aplicación.
La solución rápida y sucia que encontré fue copiar / pegar la aplicación y ref.conf de las dependencias en una controlada por mí.
El corazón de nuestros servicios es scala + akka + spray + mongo. Así que estamos usando GitHub para el control de versiones. Después de fusionar las relaciones públicas marcadas con la rama maestra, Jenkins automáticamente realiza pruebas y construye proyectos. Si todas las pruebas tuvieron éxito, Jenking ejecuta un par de scripts:
- Versión de proyecto de incremento (actualmente escrita en shell, pero se cambiará a sbt)
- Ejecutar la tarea de montaje con sbt-assembly
- Ejecute el script de implementación (escrito en Python con Fabric) que implementa nuestro jar en EC2
Básicamente, en el tercer paso tiene un par de opciones:
Haz un archivo ejecutable usando el archivo de arranque IO / Spray:
object Boot extends App {
implicit val system = ActorSystem("ServiceName")
val log = system.log
val service = system.actorOf(Props[Service], name="serviceActor")
IO(Http) ! Http.Bind(service, interface = host, port = port)
}
Hacer un tarro ejecutable como microkernel de Akka:
En este caso, debe extender el rasgo de startup
y anular los métodos de startup
y shutdown
:
class Kernel extends Bootable {
// many lines of code
def startup() {
scheduler.start()
SomeActorSystem.startup()
}
def shutdown() {
scheduler.shutdown()
SomeActorSystem.shutdown()
system.shutdown()
}
}
Utilizando un script de inicio TypeSafe:
No puedo mostrar un ejemplo, pero tiene una buena introducción en github =)
Estamos utilizando todo esto en diferentes casos.