Ruby on Rails, parte 11: Conexión con MySQL

6 Jun

Bueno, como todos sabemos cada lenguaje de programación permite conectarse a distintas bases de datos, sin embargo cada uno tiene cierta ‘preferencia’ por una en particular. Así como PHP con MySQL o Java con Oracle la base de datos que viene por ‘defecto’ por así decirlo en RoR es Sqlite. Sin embargo para los que venimos de PHP la base de datos preferida para hacer conexiones es MySQL. Los motivos son muchos, uno de los tantos es lo rápida que es para trabajar con aplicaciones web. Sin más palabrería empecemos.

Vamos a crear un nuevo proyecto, pero ¡OJO! si lo hacemos como lo venimos haciendo hasta ahora RoR tomará como base de datos Sqllite a trabajar. Para aclararle a Rails que nosotros queremos que nuestra aplicación se conecte a un MySQL debemos abrir la consola y escribir:

rails new nombre_del_proyecto -d mysql

Esto es casi igual, sólo que debemos agregarle a lo último “-d mysql”. No olvidar esto.

Yo voy a crear un proyecto que nos servirá de base para trabajar en futuros posteos con los modelos llamado organizador. Así que escribiré en la línea de comandos:

rails new organizador -d mysql

Bien, hasta acá todo muy bien. Pero todavía no podemos trabajar con MySQL, debemos hacer un par de cosillas antes.

Algo que parece obvio pero no está de más aclarar es que para conectar la aplicación con MySQL debemos tener MySQL instalado. Si por ejemplo venís del mundo de PHP y tenés en tu computadora instalado algún programa como Xampp, Wamp, etc ese MySQL te sirve, si no lo tenés instalado en tu máquina podés instalarlo desde aquí.

Otra cosa que es importante es que la versión de MySQL debe ser a partir de la 5.0, si no sabés qué versión tenés instalada en tu máquina, podés verificarlo entrando en tu phpMyAdmin o la interfaz que tengas para hacer consultas y ejecutar:

SELECT VERSION()

Asumiendo que tenés MySQL instalado seguimos.

Ahora, para lograr que RoR se conecte a MySQL debemos instalar una gema, las gemas son como extensiones que utiliza Rails. En este caso tendremos que instalar una llamada “mysql2” de esta forma:

gem install mysql2

Una vez instalada la consola nos devolverá mensaje y una url, a mí me ha devuelto:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0
.2-win32.zip/from/pick

Al visitar esta dirección nos permitirá descargar un archivo .zip. Entramos a la url que devuelve la consola de Rails y descargamos el archivo.

Bien, ahora descomprimimos el archivo entramos en él buscamos el archivo dentro del directorio mysql-connector-c-noinstall-xxxx (Las xxxxx dependen de la versión, tendrás que buscar directorio similar) y dentro del mismo entrar a ‘lib’ y copiar el archivo ‘libmysql.dll’. Ahora debemos entrar a nuestra carpeta de instalación de Rails, si tu sistema operativo es Windows 7 podés encontrarlo dentro del disco c:\ en el directorio ‘RailsInstaller’ entramos en ‘Rubyxxx’ (xxx es la versión, en mi caso 1.9.3) y dentro de la carpeta ‘bin’ pegamos el archivo que acabamos de copiar.

Todo esto debería realizarse sólo la primera vez, de ahora en adelante cada vez que crees un proyecto que se conecte a MySQL no es necesario instalar la gema “mysql2” nuevamente.

Bien, RoR trabaja con tres bases de datos para cada proyecto: development, test y production. La primera es la base de datos de desarrollo, osea el programador creará su base de datos para probar la aplicación antes de que pase a producción. La segunda es una base de datos reciclable que sirve para probar cosas, realmente nunca la probé pero por lo que tengo entendido es una base de datos que borra sus registros al finalizar el testeo. Y la tercera es la base de datos final, una vez probado el proyecto y verificado que todo está correcto la base de datos de producción será el producto final.

Por el momento nosotros todas las pruebas que haremos los veremos en la tabla development, aunque deberíamos crear las tres.

Dentro de tu phpMyAdmin o de la interfaz que utilices para realizar consultas a tu MySQL creá tres bases de datos. Podés crearla como quieras, yo las crearé por código:

CREATE DATABASE organizador_development;
CREATE DATABASE organizador_test;
CREATE DATABASE organizador_production;

Vos le podés poner los nombres que quieras, yo le puse esos para seguir con nuestro mini proyecto llamado organizador.

Ahora para conectar nuestra aplicación con la base de datos vamos a la raíz de nuestro proyecto y a config -> database.yml y editamos este archivo.

Los datos que debemos cambiar son databaseusernamepasswordhost en las tres bases.

development:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: organizador_development
  pool: 5
  username: tu_usuario
  password: tu_contrasena
  host: 127.0.0.1

test:

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: organizador_test
  pool: 5
  username: tu_usuario
  password: tu_contrasena
  host: 127.0.0.1

production:

production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: organizador_production
  pool: 5
  username: tu_usuario
  password: tu_contrasena
  host: 127.0.0.1

Básicamente las tres son iguales, sólo cambia el nombre de la base de datos, a menos que cada base de datos le pertenezca a un usuario diferente. Por ejemplo en mi caso yo uso el usuario root para el username y la contraseña del mismo de mi phpMyAdmin.

Bien, ahora probemos que todo funciona, dentro de la consola de Rails iniciemos el servidor:

Entrás a tu proyecto:

cd tu_proyecto.

En mi caso:

cd organizador

E iniciá tu servidor:

rails s

En mi caso:

rails s

Ponele un ojo a la consola y esperá, si el servidor se inicia sin problemas todo OK, si te muestra algún error leelo y fijate qué puede ser.

Si al ingresar a:

http://localhost:3000/

Vemos el mensaje de instalación de RoR:

 

 

 

 

 

 

 

 

 

 

 

 

Entonces todo ha salido bien.

 

Probables errores

Al intentar realizar este proceso la primera vez tuve algunos inconvenientes. Uno donde host: por defecto dice localhost, pero nosotros debemos cambiarlo por 127.0.0.1. Aunque es lo mismo RoR al parecer necesita una IP, sinceramente ignoro a qué se debe esto.

Otra cosa también, si usás Apache, pero la contraseña de tu base de datos es una cadena vacía deberías cambiarla ingresando algún texto. La contraseña para RoR no puede ser una cadena vacía. Si no sabés cómo cambiarla acá te explican.

Bueno, en la próxima veremos como realizar consultas.

Saludos!

Anterior: Ruby on Rails, parte 10: Cookies y sesiones

Siguiente: Ruby on Rails, parte 12: Modelos y migraciones

Redes sociables

    One thought on “Ruby on Rails, parte 11: Conexión con MySQL

    1. hola..
      en caso de problemas con la instalación de la gem mysql2
      utilice la siguiente linea de comando.

      descargue el conector para c de win32, ya que use mysql win32
      *archivo zip

      gem install mysql –platform=ruby — –with-mysql-dir=C:/mysql-connector-c-noinstall-6.0.2-win32

      solo cambie la ruta del directorio donde se descomprime el archivo zip.

    Comments are closed.