Bases de Datos y Rails

Francesco Rodriguez edited this page Sep 14, 2012 · 12 revisions

Hey! Imagino que si ya has creado tu primera aplicación en Rails te habrás dado cuenta que Rails usa SQLite por defecto. SQLite es genial si quieres probar cosas o correr tus tests pero talvez no sea lo ideal para una aplicación en producción. Así que si has estado deployando tus aplicaciones Rails con sqlite en producción, aquí te enseñamos como cambiar sqlite por una base de datos más "fancy".

Creando una nueva aplicación Rails con otra Base de Datos:

Si estás empezando una nueva aplicación Rails y quieres elegir la base de datos que usarás por defecto, es super sencillo. Los generadores que provee Rails aceptan diferentes opciones. En este caso, puedes usar la opción --database (o su alias: -d) para elegir la de base de datos que prefieras:

# rails new facilito -d postgresql

En el ejemplo anterior, estamos creando una nueva aplicación Rails especialmente configurada para usar PostgreSQL por defecto. Fácil! Lo que hace el generador es configurar la gema pg en nuestro archivo Gemfile de la siguiente manera:

...

gem 'pg'

...

Esta gema es la que permite que nuestra aplicación se pueda comunicar con nuestra base de datos PostgreSQL. Además puedes ver que nuestra configuración de base de datos en el archivo config/database.yml ha cambiado un poco:

...

development:
  adapter: postgresql
  encoding: unicode
  database: facilito_development
  pool: 5
  username: facilito
  password:

test:
  adapter: postgresql
...

Esta es la lista de opciones que Rails soporta por defecto:

  • mysql.
  • oracle.
  • postgresql.
  • sqlite3.
  • frontbase.
  • ibm_db.
  • sqlserver.
  • jdbcmysql.
  • jdbcsqlite3.
  • jdbcpostgresql.
  • jdbc.

Talvez te preguntas: ¿Y qué hay con las bases de datos NoSQL? Pues ActiveRecord es el ORM que usa Rails por defecto y sólo soporta bases de datos relaciones como: PostgreSQL o MySQL. Si quieres usar una base de datos no relacional, existen otras gemas/ORMs que te pueden ayudar, como por ejemplo:

TIP. Si quieres saber qué otras opciones acepta el generador de nuevas aplicaciones de Rails, prueba ejecutando en la terminal:

$ rails new -h

Cambiando la base de datos de una aplicación existente:

Esto también es super fácil. Imaginemos que Juan Chacal quiere migrar su aplicación de SQLite a MySQL. Los pasos que tendría que seguir serían los siguientes:

El primer paso, sería cambiar la gema sqlite por mysql2 en el archivo Gemfile. Así nuestro amigo tendría la librería para conectarse a su base de datos MySQL.

...

# gem 'sqlite'
gem 'mysql2'

...

Luego, ejecutar bundle install para instalar la nueva dependencia.

Por último, simplemente cambiar la antigua configuración de la base de datos en el archivo config/database.yml:

...

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
...

por la nueva configuración para MySQL:

...

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: facilito_development
  username: root
  password: false
  host: localhost

test:
  adapter: mysql2
...

Listo! Talvez ahora necesite crear la nueva base de datos, correr las migraciones e ingresar la data inicial. Esto se puede hacer ejecutando:

$ rake db:create
$ rake db:migrate
$ rake db:seed

o el siguiente comando que hace lo mismo que las anteriores:

$ rake db:setup
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.