Chile On Rails! | Ruby on Rails desde Chile

Estamos comenzando una serie de posts acerca de aplicaciones chilenas desarrolladas en Ruby on Rails.

Hoy hablaremos de “Clerk” (http://www.clerk.im/), aplicación desarrollada en Rails para la gestión de reservas en Hoteles, desarrollada por los muchachos de AyerViernes S.A..

Nos contactamos con Fabián Ramirez (@dokshor) del equipo AyerViernes para que nos cuente un poco más de este proyecto.

@chileonrails: ¿Como nace el proyecto “Clerk”?

@dokshor: La idea Clerk, viene desde la empresa AyerViernes S.A., para satisfacer una necesidad de la Gestión Hotelera para la PYME.
Nos dimos cuenta de los altos costos que se cobra por un software de escritorio, y vimos la oportunidad de realizar algo mucho mas eficiente.

@chileonrails: ¿A quien está enfocado este sistema? ¿Es solo para hoteles grandes y/o que se encuentren en Latinoamérica?, ¿Cuales son sus principales características?


Vamos enfocados a la PYME en todo el mundo. Actualmente nuestro sistema cuenta con Inglés y Español, pero en un futuro próximo no descartamos realizar la traducción de múltiples lenguajes de la aplicación.

Nuestra principal característica es que jugamos con el factor “Tiempo vs Espacio” en nuestra novedosa interfaz de gestión hotelera, para así llegar a un nivel de inteligencia del negocio que permita saber de todo lo que pasa tiempo real.

Clerk Tour (Español) from Clerk.im on Vimeo.

@chileonrails: ¿Cuáles son los próximos pasos que tienen planificados para este proyecto?

@dokshor: Nuestro próximo paso es liberar la API, para que todos los desarrolladores o sistemas ya existentes, puedan unirse a nosotros y trabajar en forma conjunta, así lograremos una gran atención externa, por ser un sistema que se pueda comunicar con el negocio local en tiempo real.

@chileonrails: Algunas preguntas sobre AyerViernes:
Ustedes tienen un equipo distribuido (tú no estas en chile), como lo hacen para trabajar?

@dokshor: Nosotros somos un equipo multidisciplinario que se especializa en diferentes áreas, tales como:

  • Diseño Front
  • Arquitectura de la información
  • Usabilidad
  • Programación

La idea es juntar todos esos conocimientos de gente de provincia (Viña del Mar), y unirlos para realizar un producto que sea fácil de usar, rápido y confiable.

@chileonrails: ¿Cuanto tiempo que llevan trabajando con Ruby on Rails?¿En la empresa manejan solo Rails o también manejan otros frameworks para los desarrollos?

@dokshor: Actualmente en AyerViernes S.A. trabajamos Ruby on Rails para Clerk, pero dentro manejamos otros frameworks como es el caso de CakePHP y Wordpress. Queremos ir en un futuro realizando mas proyectos personales que serán realizados todos con Ruby on Rails esperamos.

@chileonrails: Algunas herramientas, gemas o plugins que utilicen y que quieran recomendar?

@dokshor:  Sí, utilizamos mucho el servidor Nginx, que actúa como proxy de balanceo y distribución de carga. También utilizamos gemas de ruby, tales como:

Dentro de los plugins de Rails utilizamos:

El resto es un sistema totalmente independiente que hemos ido modelando con el tiempo del desarrollo y las necesidades que habíamos tenido en su debido momento.

@chileonrails: Muchas gracias por tu tiempo Fabián!

Así que ya saben, si necesitan un sistema que les permita manejar un hotel de forma fácil y a un precio razonable revisen www.clerk.im.


Acá terminamos con la primera de muchas entrevistas que vendrán. Si tienes un proyecto Ruby o Ruby on Rails que desees difundir avisanos a info@chileonrails.cl.

Saludos!

, , , Hide

Este es el primer post para desarrollo web con Ruby on Rails, y cada semana trataremos de ir publicando artículos, tutoriales, notas y actualidad sobre este maravilloso framework y lo que ocurre con éste en Chile y el resto del mundo.

Para ejemplificar lo que haremos de aquí en adelante será desarrollar una aplicación de solicitud de soporte o de tickets llamado Helpdesk- no del tamaño o complejidad como pueden ser trac o lighthouseapp – a través de una serie de pasos o entregas, en los cuales se irán agregando funcionalidades cuando se requiera (tal es el caso de la autenticación, búsqueda, escalabilidad, entre otros). Como aclaración, un ticket es una solicitud de soporte en donde cada cliente llena un formulario, esperando que ésta sea respondida.

Empezaremos desde lo más básico en este primer post. No entraremos en detalle de cómo se instala ruby, rails (guides.rubyonrails.org), si estás en windows, mac o linux, o qué editores usas como textmate, emacs o {vi => :) }. Se asume que tienes todo lo necesario para empezar a desarrollar la aplicación, si es el caso contrario, date un paseo por google. También se asume que sabes al menos crear una aplicación como un blog, de los cuales está lleno de tutoriales por la red.

Empezaremos desde lo más básico en este primer post. No entraremos en detalle de cómo se instala ruby, rails (http://guides.rubyonrails.org), si estás en windows, mac o linux, o qué editores usas como textmate, emacs o {vi => :) }. Se asume que tienes todo lo necesario para empezar a desarrollar la aplicación, si es el caso contrario, date un paseo por google. También se asume que sabes al menos crear una aplicación como un blog, de los cuales está lleno de tutoriales por la red.

La versión usada de rails para este tutorial es la 2.3.4, ruby 1.8.7, rubygems 1.3.5. Ahora, el inglés será nuestro lenguaje en cuanto a nombres de modelos, mensajes y todo lo relacionado con rails, para una mayor convención. En un apartado siguiente nos enfocaremos a internacionalizar la aplicación (i18n), pero por el momento solo inglés.

Espero les guste.

Aplicación Helpdesk

Podríamos pasar días haciendo minitutoriales con mucho esfuerzo para demostrar funcionalidades de rails, pero no es la idea. Haremos una aplicación que iremos completando en el camino cuando nuestro “cliente”, una manera de decir, nos pida más funcionalidades.

Nuestra aplicación nos ayudará a ilustrar muchas de las características del desarrollo en rails. Veremos etapas como la creación del proyecto, manejo de sesiones, páginas de mantención de modelos o crud’s (a menudo también llamados “maestros”), caché, búsquedas, y muchas más, hasta llegar a completar una aplicación de mediana complejidad.

Bueno empecemos dejemos el blah blah.

Qué hace Helpdesk.

Una solicitud de soporte o, de aquí en adelante un ticket, asigna un identficador único a solicitudes de soporte, de forma de facilitar el seguimiento y manejo de dichas solicitudes así como cualquier interacción con sus clientes (es.wikipedia.org/wiki/Open-source_Ticket_Request_System).

Lo esencial de nuestra aplicación es que podamos ingresar tickets, editarlos y eliminarlos. Ahora cada ticket tiene un estado o status, los cuales nuestro cliente los tiene bien definidos (aunque éstos puedan cambiar en el tiempo, no debiera ser mayor complejidad). Los estados de un ticket pueden ser: new, open, hold, resolved, invalid. También contiene comentarios acerca de una posible solución o simplemente para agregar más detalles en relación al ticket.

Nota: en cuanto a que un ticket sea asignado a un usuario se verá en la siguiente parte de este tutorial.

Después de conversar estos temas con nuestro cliente, estamos listos para empezar a desarrollar la aplicación basándonos en nuestro entendimiento aunque sea a modo básico.

El desarrollo será del modo incremental, esto significa que no necesitaremos la especificación completa del sistema, sino que con una pequeña descripción de lo que quiere nuestro “cliente” podremos crear inmediatamente la funcionalidad pedida.

En esta primera iteración haremos lo siguiente:

  • Creación del esqueleto de nuestra aplicación
  • Generar los modelos
  • Versión inicial o crud’s de nuestros modelos

Creación del esqueleto de nuestra aplicación

rails helpdesk

Esto crea el directorio en donde trabajaremos desde ahora en adelante. Por defecto nuestra base de datos será sqlite3. Pueden usar una distinta base de datos para trabajar con rails.

cd helpdesk
rake db:create

Con este comando crearemos nuestras base de datos si todo está bien configurado en el archivo config/database.yml.

Generar los modelos

En la etapa del modelamiento con nuestro cliente, ya obtuvimos 3 modelos: Ticket, Status y Comment. Avancemos con la creación de estos.


ruby script/generate scaffold status name:string

Como ya se dijo anteriormente el Status puede corresponder a cinco tipos: new, open, hold, resolved, invalid. La generación del modelo Status implica (no siempre) la creación de un archivo de migración en la cual antiguamente se veía de esta manera (rails < 2.3.4):


class CreateStatuses < ActiveRecord::Migration
  def self.up
    create_table :statuses do |t|
      t.string :name

      t.timestamps
    end
    Status.create(:name => "new")
    Status.create(:name => "open")
    Status.create(:name => "hold")
    Status.create(:name => "resolved")
    Status.create(:name => "invalid")
  end

  def self.down
    drop_table :statuses
  end
end

Mmm ahora con rails en su versión 2.3.4 esto ha cambiado para que no toquemos las migraciones. A lo que nos referimos es a los seeds o datos semilla para poder poblar o cargar un conjunto de datos iniciales commit. El archivo encargado de esto se encuentra bajo db/seeds.rb el cual refactorizando nuestra migración de más arriba quedaría así:


class CreateStatuses < ActiveRecord::Migration
  def self.up
    create_table :statuses do |t|
      t.string :name

      t.timestamps
    end
  end

  def self.down
    drop_table :statuses
  end
end

Y nuestro archivo db/seeds.rb


Status.create(:name => "new")
Status.create(:name => "open")
Status.create(:name => "hold")
Status.create(:name => "resolved")
Status.create(:name => "invalid")

Veamos el segundo modelo Ticket. De modo minimalista contiene un campo subject que contiene una breve descripción, y el campo body el cual es el cuerpo del mensaje en detalle. Ahora cada ticket está asociado con un status o estado. Por lo cual la generación será de esta manera.


ruby script/generate scaffold ticket subject:string body:text status:references

Ahora el tercer modelo Comment representa los comentarios del ticket en cuestión. Se compone de dos campos: body que es el comentario en sí y ticket_id haciendo referencia al ticket que pertenece.


ruby script/generate scaffold comment body:text ticket:references

Bueno, ahora corremos las migraciones:


rake db:migrate

Y también poblaremos los statuses

rake db:seed

Nuestro archivo de configuración de rutas por otra parte

# config/routes.rb
ActionController::Routing::Routes.draw do |map|

  # map.resources :tickets, :has_many => :comments
  map.resources :tickets do |ticket|
    ticket.resources :comments
  end
  map.resources :statuses
  map.root :tickets
end

El resto del código fuente se encuentra en github.com. Para clonar nuestro repositorio y correr helpdesk:


git clone git://github.com/chileonrails/helpdesk.git
cd helpdesk
rake db:migrate
rake db:seed
ruby script/server

Bueno y llegamos al fin de la primera entrega, espero que les haya servido. El fuente se encuentra en github así que podrán descargarlo y revisar los modelos, controladores y vistas. Cualquier corrección al tutorial por favor enviar un correo.

Esta primera entrega, solo se trató la introducción para poder tener la base para el tutorial completo. Como el código fuente completo se encuentra en github.com no es necesario detallar qué se hizo en cada paso. En las siguientes entregas se verán temas más avanzados sobre rails que iremos discutiendo con el paso del tiempo.

Esperamos sus comentarios. Y ya estamos trabajando para poder tenerles la segunda parte.

No tags Hide

Nov/09

5

Chile On Rails is back !!

Hola a todos !! estamos relanzando el portal chileonrails.cl
Trataremos de mantenerlo actualizado constantemente.
Saludos  :)

No tags Hide