Archivo de la etiqueta: Cassandra

Ruby on Rails + Cassandra DB en Linux Ubuntu

Estimandos, continuando con las guías entretenidas: Seguimos con el simpático lenguaje de desarrollo Ruby y su framework Rails. Y para hacerlo más entretenido aún implementaremos la base de datos no relacional (noSQL) Cassandra, dicha base de datos fué creada por facebook, pero al poco tiempo pasó a las manos de Apache Fundation en la cual se desarrolló y desarrolla hasta convertirse en lo que es hoy. En esta guía básica utilizaremos la versión 0.8.4 de Cassandra. Comencemos!.

Para los propósitos de esta guía, necesitamos:

– Linux Ubuntu.

– Conección a internet

– y llevar lo ñoñez en la sangre!

 

Ruby on Rails

Primero instalamos Ruby, aplicando la magia de ubuntu…

sudo apt-get install ruby

Seguimos con su framework Rails (necesitamos el cargador de gemas de Ruby y el interprete irb):

sudo apt-get install irb
sudo apt-get install rubygems
sudo gem install rails -–include-dependencies

Y para no perder la linea, creemos de inmediato un proyecto:

rails new primerProyecto

Nos generará una larga lista de de directorios y archivos.

Los que nos interesan como referencia básica son:

cd primerProyecto
app/controllers
app/views
script/rails
 

Entonces creamos nuestro controlador

ruby script/rails generate controller Home index

El cual también generará un par de archivos, donde:

script/rails : es el script escrito en ruby que realizará el procedimiento de generación los archivos.

generate : es la acción a realizar.

controller : es el tipo de archivos que queremos generar.

Home : es el nombre del controlador que se generará.

index : es el método que vamos a crear dentro del controlador, si quisiéramos generar más, basta con ir escribiéndolos separados con un espacio.

 

Abrimos nuestro controlador:

(Yo utilizo “vim” como editor de consola, utilicen el que deseen)

vim app/controllers/home_controller.rb

Nos encontramos con una estructura así:

class HomeController < ApplicationController
        def index
        end
end

Tengo 2 formas de comentar codigo, una es con un # ante de la linea y para comentar parrafos debo hacerlo con

#Esta es mi forma de comentar
#de una sola linea

=begin
Aquí va mi texto comentado
en forma de párrafo
en varias lineas
=end

Creamos una función index, que por defecto es la primera función que se ejecuta entrar al controlador:

Ojo con las comillas, porque si copian y pegan pueden tener problemas, recomiendo escribirlas manualmente.

class HomeController < ApplicationController
    # Controlador que se ejecuta por default
    def index
        # render:text escribe un texto en pantalla sin la necesidad de crear una vista (views) explicitamente
        render:text => “Hola Mundo!”
    end
end

Ahora si quiere utilizar el controlador más la vista, lo hacemos de la siguiente forma

class HomeController < ApplicationController
    # Controlador que se ejecuta por default
    def index
        @nombre => “Mi nombre es Pablo Araya<br />”
        @ubicacion => “Santiago, Chile”
    end
end

Abrimos nuestra vista

vim app/views/home/index.html.erb

Deberíamos verla así

<h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p>

y lo dejamos así:

 <h1>Home#index</h1>
<p>Find me in app/views/home/index.html.erb</p> 
<%= "Mi nombre es "+nombre+" y vivo en "+ubicacion %>

el codigo ruby va entre estas etiquetas

<%
# Aqui nuestro codigo
%>

si queremos imprimer algo en el navegador agregamos el signo =

<%= variable %>

 

Ahora es el turno de Cassandra

Bajamos la última versión de Cassandra: http://cassandra.apache.org/#download o en consola:

wget http://apache.freeby.pctools.cl//cassandra/0.8.4/apache-cassandra-0.8.4-bin.tar.gz

Lo descomprimimos, lo renombramos a cassandra y lo movemos al directorio /opt:

tar xzvf apache-cassandra-0.8.4-bin.tar.gz
mv apache-cassandra-0.8.4-bin cassandra
sudo mv cassandra /opt/

Creamos los directorios que la aplicación necesita:

sudo mkdir -p /var/lib/cassandra/{commitlog,data,callouts,staging}
sudo mkdir /var/log/cassandra
sudo chmod -R 777 /var/lib/cassandra/

Creamos el fichero /var/log/cassandra/system.log y le damos permisos de escritura:

touch /var/log/cassandra/system.log
sudo chmod 777 /var/log/cassandra/system.log

Necesitamos crear nuestra estructura de base de datos, ya que Cassandra es un motor no relacional, su estructura parece grandes columnas o arreglos bidimensionales.

Ahora ya podemos levantar Cassandra, de forma default o definiendo parametros.

/opt/cassandra/bin/cassandra -f &
/opt/cassandra/bin/cassandra-cli -host localhost -port 9160

Lo entretenido de esta guía es hacer que estos dos sistemas interactuen, asi que nos vamos a nuestro controlador:

vim app/controllers/home_controller.rb

Y lo dejamos de la siguiente forma:

# Traigo mi gema cassandra para realizar la conexion
require 'cassandra'
class HomeController < ApplicationController
    # Controlador que se ejecuta por default
    def index
        =begin
        Creo mi nueva conexion con Cassandra.new('Espacio de trabajo','ip servidor')
        Si tengo ruby y cassandra en el mismo servidor, puedo omitir la ip
        =end
        store = Cassandra.new('Keyspace1')
        @nombre => “Mi nombre es Pablo Araya<br />”
        @ubicacion => “Santiago, Chile”
    end
end

Continua..