-
Notifications
You must be signed in to change notification settings - Fork 15
Bases de Datos y Rails
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".
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
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