Si se está desarrollando una aplicación web con Rust y Rocket, y se desea configurar Travis CI para probar los cambios enviados al repositorio de GitHub y posteriormente hacer el deploy a Heroku, en este artículo voy a explicar como hacerlo.
.gitignore
Para pruebas realizadas desde el entorno de desarrollo local, se debe crear el archivo .gitignore
, para evitar que los archivos generados durante la compilación se sincronicen con el repositorio. El archivo debe contener lo siguiente:
# Generated by Cargo
# will have compiled files and executables
/target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
Este archivo puede generarse desde la creación de un nuevo repositorio, seleccionando el lenguaje en el que se está desarrollando el proyecto.
También puede crearse desde gitignore.io, descargar el archivo y agregarlo al repositorio.
Travis CI
Travis CI es un sistema distribuido de integración continua, usado para construir y realizar pruebas de proyectos alojados en GitHub. Tiene soporte para múltiples lenguajes, como Python, Ruby, Go, PHP y Rust. Cuenta con una versión gratuita para proyectos de código abierto, disponible en travis-ci.org.
Para acceder a Travis CI no es necesario crear una cuenta, solo se debe iniciar sesión en GitHub y autorizar el acceso.
Una vez que se ha conectado Travis CI a la cuenta de GitHub, se debe crear un archivo en el repositorio del proyecto en el que se indica la versión de Rust que se está usando.
En seguida, en el repositorio, se crea un archivo llamado .travis.yml
que debe contener lo siguiente:
language: rust
rust:
- nightly
cache: cargo
Se especifica el lenguaje del proyecto, se indica la versión de Rust que se está usando, Rocket ocupa Nightly, y será la que Travis CI descargará para realizar las pruebas, luego se genera una cache de las dependencias, para evitar que se descarguen y compilen si no existe una versión nueva.
Una vez que se ha agregado este archivo, Travis CI realizará el primer test al proyecto. Con cada cambio que se envíe al repositorio se realizará un test nuevo. Los tests se pueden ver en tiempo real desde la URL generada por Travis CI, como: https://travis-ci.org/usuario/repositorio
. Y si no ha habido ningún error, mostrará lo siguiente:
Para recibir notificaciones en Telegram cuando un test termine, se puede usar TravisCI-Telegam-Bot, un bot no oficial, que se puede agregar abriendo el siguiente enlace: https://telegram.me/TravisCI_Telegam_Bot
.
Para indicar de que proyecto debe enviar notificaciones, solo se le pasa la URL y devuelve el siguiente mensaje, y a partir de ahí estará enviando notificaciones.
Heroku
Heroku tiene soporte para lenguajes y tecnologías como Node.js, Ruby, Java, PHP, Python y Go, y para lenguajes como Rust a través de paquetes de construcción (build packs) desarrollados por la comunidad.
Después de crear la aplicación en Heroku, se realiza la configuración correspondiente.
En el panel de la aplicación, en el apartado Deploy
, se modifica lo siguiente:
Se busca el repositorio desde donde se hará el deploy y se realiza la conexión.
Se habilita el deploy automático, para ello se selecciona la rama desde donde se hará el deploy y se marca la opción
Wait for CI to pass before deploy
para indicar que el deploy se realizará una vez que Travis CI haya completado el test y que este se haya realizado con éxito.
En seguida en el apartado Settings
se realiza la siguiente configuración:
- Se agrega la URL del paquete de construcción correspondiente, que para Rust es
https://github.com/emk/heroku-buildpack-rust.git
.
La URL desde donde se puede acceder a la aplicación tiene el formato https://nombre-aplicacion.herokuapp.com
.
En seguida se crean los archivos Rocket.toml
, RustConfig
y Procfile
en el repositorio.
En el archivo Procfile
se indica la versión de Rust que deberá usar Heroku para el deployment, ya que por defecto descarga la versión Stable y para Rocket se necesita Nightly.
VERSION = nightly
En el archivo Rocket.toml se configura la dirección de la aplicación, tal y como se indica en la documentación oficial.
[global]
limits = { forms = 32768, json = 32768 }
[development]
address = "localhost"
port = 8000
log = "normal"
[staging]
address = "0.0.0.0"
port = 8000
log = "normal"
[production]
base_url = "https://nombre-aplicacion.herokuapp.com"
log = "critical"
Por último, en el archivo Procfile
se escribe la instrucción que iniciará la aplicación.
ROCKET_PORT=$PORT ROCKET_ENV=prod ./target/release/nombre-binario
Heroku asigna el puerto de manera dinámica, es por eso que este no se especifica en el archivo Rocket.toml
, ya que el puerto se obtiene con ROCKET_PORT=$PORT
, además se indica que la aplicación se ejecuta en entorno de producción mediante ROCKET_ENV=prod
y la ruta del binario correspondiente ./target/release/nombre-binario
, según lo indicado en Cargo.toml
.
Una vez que se realiza la configuración, se envía un pequeño cambio al repositorio, para que Travis CI realice el test y posteriormente el deploy a Heroku.
En esta URL se puede ver un ejemplo: https://reveal-gallery.herokuapp.com/ y el repositorio de GitHub aquí.
Espero que este tutorial les haya servido.
Top comments (0)