Saltar al contenido →

Ruby & Puma & Sinatra

Da igual si desarrollas aplicaciones para móviles o de escritorio, seguro que en algún momento debes conectar a un servicio para obtener datos o para guardarlos.

Hoy en día la tendencia es emplear servicios RESTful para implementar el backend de nuestras aplicaciones y dentro de esta tendencia vamos a ver una de las más extendidas, hablamos de Ruby como lenguaje de desarrollo, Puma como servidor web y Sinatra como framework para crear los servicios.

Ahora vamos a ver cómo obtener y configurar todo esto.

Instalando Ruby

En la propia web de Ruby en castellano podemos leer una definición del lenguaje

Un lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad.

Añadiremos que es orientado a objectos e interpretado y que fue creado en 1993 por el japonés Yukihiro “Matz” Matsumoto. Está disponible bajo licencia de código abierto.

Para el artículo de hoy vamos a emplear un PC con sistema operativo Windows, aunque se puede hacer perfectamente en sistemas Linux, OSX…, por lo que lo primero es dirigirnos a la página de descarga de Ruby. Aquí vemos que sólo está disponible el código fuente de Ruby para su posterior compilación.

No hay que asustarse, en esa misma página nos remiten a un listado con los paquetes binarios para las distintas plataformas en las que se encuentra disponible.

En nuestro caso hemos dicho que vamos a instalarlo en un ordenador con Windows, así que escogemos RubyInstaller.
Dentro de la web de RubyInstaller nos dirigimos a la sección de descargas y es aquí donde vamos a descargar dos archivos.

  • Instalador de Ruby
  • Ruby Development Kit

Ruby Website

Una vez tengamos estos dos archivos en nuestro poder empezamos con el proceso de instalación. Primero vamos con el paquete de instalación de Ruby y después con el DevKit. Este último es en realidad un archivo ZIP, y nos pedirá una carpeta de nuestro disco duro en el que descomprimir su contenido.

Al terminar con estos ya podréis ejecutar código Ruby desde la consola de comandos. Para ellos nos dirigimos a la carpeta Ruby 2.2.3-p173-x64 que se encuentra en la sección Todos los programas dentro del botón Inicio de Windows.

Al expandir dicha carpeta nos encontramos con un enlace a la línea de comandos que viene con el PATH modificado para incluir las rutas a todas las herramientas de Ruby que vamos a necesitar.

Path

Para probar que se ha instalado con éxito vamos a ejecutar un pequeño programa que imprimirá un mensaje en la consola de comandos

#
# Ejemplo para probar la instalación de Ruby
#

class User
    # Constructor
    def initialize(name)
        @name = name
    end

    # Descripcion de la clase
    def to_s
        return "It's #{@name}"
    end
end

# Creamos un usuario...
user = User.new("me")
# ...y nos saluda
print("Hi! #{user.to_s}")

Sólo tenemos que ejecutar…

ruby test-ruby-install.rb

…y leeremos el mensaje si todo se ha instalado correctamente.

El último paso es una mínima configuración en el DevKit así que volvemos a la línea de comandos, nos situamos en la carpeta donde hemos descomprimido el archivo zip y hacemos lo siguiente:

  1. Ejecutamos el comando ruby dk.rb
  2. Abrimos el archivo config.yml y añadimos una línea al final con la ruta al directorio raiz de la instalación de Ruby. Delante de la ruta hay que añadir un guión seguido por un espacio(- ).
  3. Ejecutamos el comando ruby dk.rb install

Puma. El servidor Web.

Una vez que tenemos el interprete sobre el que se ejecutarán nuestros servicios ahora le toca el turno al servidor web y para este puesto nos decidimos por Puma.

Puma is a small library that provides a very fast and concurrent HTTP 1.1 server for Ruby web applications.

La instalación de Puma es mediante el sistema de gestión de paquetes (llamadas gemas) de Ruby. Nuevamente nos situamos en la consola de comando y ejecutamos la siguiente orden:

gem install puma

Muy poco tiempo después tendremos el servidor listo para ser usado. Podemos iniciarlo con el comando puma, pero nos dará un error ya que ahora mismo no tenemos ninguna aplicación web que usar.

Si queréis comprobar que Puma se ha instalado correctamente podéis pedir la ayuda del servidor con el comando

puma -h

Corriendo servidor Puma

Sinatra. Haciéndonos la vida más fácil.

El último paso que queda es la instalación de Sinatra, un framework que nos va a facilitar mucho la creación de nuestro servicio REST.

Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.

La instalación se hace usando el gestor de paquetes, igual que con Puma, para ello volvemos de nuevo a la consola de comando e invocamos…

gem install sinatra

Una vez terminada la instalación ya tenemos toda la infraestructura necesaria para desarrollar y desplegar nuestro servicio y para comprobarlo vamos a ver un ejemplo que nos ayudará a dar nombres a los nuevos proyectos que desarrollemos con Xcode.

Primero necesitamos la clase que se ocupa de dar el nuevo nombre…

#
# El que da los nombre
#

class Oraculo
    # Nombre del proyecto
    attr_reader :name
    # Dominio del sitio web
    attr_reader :domain

    # Constructor
    def initialize(type)
        @type = type
        # Damos nombre al proyecto
        project_name
    end

    #
    # Metodo privados
    #

    private

    # Da un nombre al proyecto segun su tipo
    def project_name
        case
            when @type == 'iOS'
                @name = "getit"
                @domain = "app"
            when @type == 'OSX'
                @name = "macapp"
                @domain = "com"
            when @type == 'WatchOS'
                @name = "glance"
                @domain = "io"
            when @type == 'tvOS'
                @name = "movieinfoapp"
                @domain = "info"
        end
    end
end

Y por último del código que expone el servicio al público gracias a Sinatra

#
# Servicio que da nombre a un proyecto de Xcode
# dependiendo de su tipo.
#

require 'sinatra'
require_relative 'Oraculo'

#
# Antes de procesar cualquier ruta...
#
before do
    content_type :html
    @types = [ "iOS", "OSX", "WatchOS", "tvOS" ]
end

# Aqui procesamos el nombrado de proyectos
get '/projectname/:type' do
    # Comprobamos que el tipo de proyecto que nos piden
    # esta entre los que controlamos
    if !@types.include?(params['type'])
        halt 403, "Solo proyectos para Xcode, gracias"
    end

    oraculo = Oraculo.new(params['type'])

    "Su proyecto, gracias:<br />" + oraculo.name + "." + oraculo.domain
end

# El *acerca de* de toda la vida
get '/about' do
    "Esto es todo <strong>amigos</strong>"
end

Guardamos los dos archivos en el mismo directorio, y en la consola de comando escribimos lo siguiente

ruby project-name.rb -s Puma -p 8080

El parámetro -s Puma está diciendo que como servidor vamos a usar una instancia de Puma que tengamos instalada y el parámetro -p 8080 indica que levantaremos el servidor en el puerto TCP 8080.

Si toda ha ido bien veremos algo como esto

Consola de Puma

Para ver que todo funciona, abrid un navegador, el que más os guste, y probad la siguiente URL http://localhost:8080/about o http://localhost:8080/projectname/tvOS

The End

El repositorio con todo el código empleado en el artículo lo podéis encontrar en GitHub

Publicado en Backend Ruby

Comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *