Ruby on Rails (Primer Encuentro)

lunes, 25 de junio de 2007

En esta oportunidad desarrollaremos nuestra primera aplicación RoR, se trata del ya conocido BLOG, para lo cual comenzaremos desde una aplicación sencilla con alguna consulta por allí, y quizás alguna búsqueda, explicando paso a paso que es cada cosa, teniendo como meta la construcción y entendimiento de cómo realizar una aplicación más elaborada. Teniendo este fin, pues lo pasare a desarrollar en diferentes entregas o mejor dicho en futuros posts.

Entonces, manos a la obra. Para este ejemplo estamos utilizando el “Instant Rails” (un paquete que trae todo ya pre configurado), si no sabes como obtenerlo entra aquí, este tema ya se hablo anteriormente en este mismo blog.

Para ordenarnos un poquito lo haremos por pasos, ¿vale? Pero antes… veamos a donde queremos llegar es este primer encuentro

Paso 1: Corriendo nuestras herramientas
Para este paso necesitamos 3 cosas, primero nuestro Instant Rails corriendo, como pueden observar automáticamente cuando lo abrimos se inician los servicios del servidor web Apache (*) y el ya conocido MySQL.

(*) El servidor apache es opcional en este punto, pues para probar nuestras aplicaciones en RoR utilizaremos otro que ya trae el propio Ruby (WEBrick), es decir pueden detener el servicio de Apache y todo estará bien.


Lo segundo que necesitamos es un editor que nos ayude con el lenguaje, el que yo utilizo es llamado “Intype”, aunque todavía esta en sus versiones por debajo de 1, yo confió en él por el poder que me da, ya lo verán cuando lo prueben. Tiene una interface como esta:



Y lo tercero y muy importante, son las consolas donde digitaremos comandos Ruby & Rails para el desarrollo de nuestra aplicación.



En realidad necesitaremos 2 consolas diferentes, una para escribir comando de generación de código (mas adelante ya lo veran) y otro para correr nuestro servidor web (WEBrick)

¡Ah! Para facilitar el trabajo con la BD, te recomiendo que utilizes algun editor, yo utilizo el “MySQL Front”, quizas conoscas otro, eso es lo de menos.

Paso 2: Generando el esquema de carpetas
Para este paso te recomiendo que te ubiques en alguna carpeta o te crees una, en la cual almacenaras todos tus proyectos de RoR, para mi facilidad yo me cree un disco virtual de nombre “Z:”, en el cual almaceno todos los proyectos RoR.

OJO: Actualmente existe una carpeta dentro del sub conjunto de carpetas de “Instant Rails”, en la cual se almacena todos los ejemplos de proyectos existentes hasta ahora. Aprovecharemos esta carpeta para crear nuestra aplicación allí.

Código:
C:\>dir c:\InstantRails\rails_apps
C:\>subst /?

C:\>subst Z: c:\InstantRails\rails_apps

C:\>subst

C:\>Z:

Z:\>dir




Vamos bien, ahora para crear la estructura de carpetas que nos ayudaran a desarrollar nuestra primera aplicación, tan solo digitaremos el siguiente comando:

Código:
Z:\>rails Blog-Cusco (enter)
Z:\>cd Blog-Cusco (enter)


Veras que se han creado un conjunto de carpetas dentro de la carpeta que lleva el mismo nombre que nuestro proyecto



Ahora seguramente te preguntas, ¿Y porque tantas carpetas?, pues la respuesta es facil, como se comento en anteriores post, RoR tiene como filosofia principal Convencion antes de configuracion, esto quiere decir que no hay por que perder el tiempo en tediosos archivos de configuracion y otros similares, con esta esctructura, Rails ya sabe donde esta todo, es por eso que no debemos de borrar nada de estructura a menos que seamos unos gurus en este aspecto.

Y ya que hablamos de estas carpetas, pues explicare de manera rapida que es cada cosa.

App : Es la carpeta principal, pues alli es donde se situa el famoso Modelo Vista Controlador, dentro podras encontrar tres carpetas referidas a este termino que menciono:



OJO: Modelo Vista Controlador (MVC), por si te lo perdiste, aquí escribi algo de esto, para que vayas entendiendolo, es recomendable que antes de seguir con este ejemplo, leas de que trata el MVC, ¿vale?

Component: Si entras a este directorio, veras que no contiene nada, es por que no hay nigun componente aun diseñado, ¿Qué es un componente? Pues imaginense esto, en nuestra pagina web necesitamos colocar un calendario, pero uno con comportamiento propio, es decir: uno puede moverse por el facilmente, ademas indica las fechas clave o cualquier comportamiento que queramos que tenga, diganme donde pondrian todo ese codigo con todo ese comportamiento, si no sabes donde, el Rails te dice donde ponerlo, pues aquí, ¿entiendes?, creo que sip.

Config: El segundo en importancia despues de App, es esta carpeta; dentro encontraras varios archivos, y como su nombre lo dice, son pequeños archivos en los cuales se debera obligatoriamente configurar una que otra cosilla, pero veremos que esta configuracion es mas que sencilla (nada de XML, que ni yo entiendo por completo hasta ahora :D)

DB: Mayormente vi que se coloca codigo SQL (claro que no es leido por ningun lado por alguna librería o algo asi), solo es para darle orden a nuestro proyecto, sere franco, no sé con exactitud para que es que lo utilizan. Bueno, ya con el tiempo lo descubrire. ;)

Doc: Que creen que se guarde aquí, ¿Documentacion?, pues claro.

Lib: Tambien el nombre es muy sugestioso, librerias de todo tipo, ponlos aquí.

Log: El tercero en prioridad (App, Config, Log), en esta carpeta podremos encontrar diferentes archivos que guardan a modo de vitacora que es lo que esta sucediendo en el momento exacto en nuestras aplicaciones. El que utilizaremos mas es “development.log”, pues podremos observar que consultas se hacen a nuestra BD (mySQL), solo por citar un ejemplo.

Public: El cuarto en prioridad (App, Config, Log, Public), aquí encontraremos todo lo que se mostrara en el navegador cliente, si entrar veran que hay directorios con nombre JavaScript y StylesSheets, ademas de otros cuantos archivos, analizalo.

Script: Esta carpeta tambien es una de las importantes, pero no la pondremos como prioridad pues dentro de esta carpeta, mayormente, no haremos nada, en esta carpeta se encuentran los comandos que escribiremos en consola al momento de crear cada parte de nuestra aplicación.

Test: Aunque no la utilize hasta ahora, pero de seguro debe ser para realizar las pruebas necesarias a nuestra aplicación.

Tmp: Archivos temporales que nunca deben de faltar, como por ejemplo, variables de sesion, cosas que guardas en la cache, etc.

Vendor: En esta carpeta se coloca cualquier archivo, componente, script, etc., que venga de algun proveedor externo a nosotros o nuestro equipo de desarrollo, por ejemplo: plugins.

Hasta aquí todo va bien, bueno, luego de haber explicado a grandes rangos que es cada cosa, continuemos.

NOTA: ¿Estan cansados?, sé que se esta haciendo larguito pero eso es porque estamos explicando todo lo que veremos mas adelante.

Paso 3: Vayamos al navegador
Sé que “Vayamos al navegador”, es muy pronto, ¿verdad?, pero en realidad para ir a probarlo lo haremos de aca 5 minutos o quizas menos. Todo depende de cuan rapidos son para tipear :D

Haber a modo de repaso de MVC, diganme, cuando un usuario hace un request (pedido al servidor), ¿quien recibe ese pedido?, sera el modelo, la vista o el controlador, piensenlo, SI muy bien, es el controlador, pues entonces lo primero que necesitamos es crear un controlador, lo llamaremos Blog, ¿vale?, escriban esto en la consola.

Se suponen que ahora estan en dentro de la aplicación rails que crearon hace un momento: “Z:\>Blog-Cusco\”

Codigo:
Z:\Blog-Cusco>ruby script\generate controller Blog

Veran que se crearan una serie de archivos y carpetas, ademas esto puede demorar algunos segundos, no se preocupen si demora entonces.



¿Pero que hicimos con este comando?, para responder esta pregunta separaremos todo este comando para explicarlo mejor:

Ruby: el encargado de ejecutar este comando
Script: recuerdan que hay una carpeta con el mismo nombre, pues solo es eso, el nombre de la carpeta que contiene los script para generar codigo.
Generate: es el script que permite generar codigo y carpetas
Controller: parametro del script generate, le dice que se cree un controlador con el nombre que posteriormente esta escrito.
Blog: nombre del controlador



Ahora debemos hacer correr nuestro servidor (WEBrick), para esto abre una nueva consola y ubicate en el mismo lugar donde te encotramos en la otra.

Codigo:
Z:\Blog-Cusco>ruby script\server (enter)


Ahora abre cualquier navegador que quieras, yo prefiro Mozilla Firefox, y escriban en la barra de direccion, “localhost:3000”, veran que aparecera algo asi:


Una ventana de bienvenida que dice mas o menos algo como “bienvenido abordo”. Hasta ahora todo va bien; ¿que nos falta? ¡Ah claro!, llamar a nuestra aplicación, entonces en la barra de direccion escriban: “localhost:3000/blog

Para explicar que hemos hecho ahora, leyendo un poco encontre esta imagen que pueda ayudar:


Entendible, ¿verdad?

Pero, volvamos a nuestro ejemplo, que mensaje aparecio…???, algo con el index, ¿verdad?, lo que sucede es que como no tenemos por ningun lado el codigo que deberia ejecutarse o mostrarse cuando lleguen a nuestra pagina, por defecto el Rails como es tan inteligente, busca un index, y al no encontrarlo manda este error. Solucionemoslo

Abre el archivo “Z:\Blog-Cusco\app\controllers\blog_controller.rb” y escribe lo siguiente:

Codigo:
class BlogController : ApplicationController
def index
render :text = "Hola mundo !!!"
end
end

Al actualizar el navegador veras los resultados…



Ahora veamos algunas variantes: Aumenta un michi antes de comenzar la linea (“#” = “comantario”) o sino borrala, luego actualiza el browser:

Codigo
#render :text = "Hola mundo !!!"


¡Ups! No encuentra la plantilla que nos dibuja al index. Observen que direccion es la que nos indica; aja, esta en la carpeta View, es obvio que si queremos mostrar algo al cliente este sera parte de la vista (MVC). Entonces deberas crearte un archivo de nombre: index.rhtml dentro de la carpeta “app/views/blog/”, una vez dentro del archivo escribe cualquier cosa, si es codigo HTML, mejor. En esta oportunidad tan solo pondremos “Hola Mundo desde la plantilla bienvenido a mi blog”, actualiza tu browser y listo.


Hasta ahora sencillo, ¿verdad?, veamos alguito mas antes de continuar con esto. En el controlador, borra todo el “def index”, es decir, dejalo como lo encontraste.


Y actualiza de nuevo el navegador, veras que sigue igual que antes, pero ¿que es lo que esta pasando?, como Rails es tan inteligente supone que siempre cuando entres a una pagina un navegador busca por defecto un archivo index, es por eso que lo redirecciona automaticamente, y hasta sin preguntarnos, es a cosas como esta que al decir “convencion antes de configuracion”, me refiero que no deberiamos perder el tiempo en cosas que ya son obvias.

¡Uff! Me canse, hasta aquí sera esta primera sesion, y aunque hayamos hecho casi nada en nuestro blog, creo que la pasamos mas explicando que es cada cosa que vemos y escribimos ¿verdad?.

Como tarea para ustedes, solo con esto que vimos hoy, que mas podrian hacer?, un buen ejemplo seria modificar el template para que se muestre nuestro index (nuestro blog) de mejor manera. Pero eso ya es de cada uno, vamos, todos abordo, y sigan sobre rieles.

1 comentario:

Anónimo dijo...

gracias amigo me a servido mucho tanto el articulo como tu blog saludos :D