Configuración de una aplicación Rails 4.2 tradicional

Actualmente existen dos enfoques para desarrollar una aplicación web, el tradicional, que es impulsado por frameworks como Rails y el de las JSON API + SPA.

En el enfoque tradicional tenemos todo nuestro código en una aplicación Rails. En ella toda la lógica de negocios está en los modelos, el cómo la operamos en los controladores y la interfaz de usuario en las vistas. Programamos las vistas con Slim, Ruby y Sass, usamos gemas como simple_form para crear fácilmente formularios en Ruby.

El enfoque JSON API + SPA, por otra parte, se cuenta con dos componentes: La aplicación servidor (API) y un cliente Javascript (o móvil) para la vista.

En principio, puede parecer atractiva la idea de hacer las vistas con Ruby y sus amigotes, pero la verdad es que no hay como trabajar en el ambiente natural del lenguaje donde se despliegan nuestras aplicaciones: usualmente Javascript.

En principio, también, puede parecer meh trabajar con HTML y amigos, sin embargo cuando descubres cosas como Grunt, Gulp, Yeoman, Bower, AngularJS y demás, —Y— lo que te permiten hacer en cuestión de organización de tu proceso de desarrollo, simplemente no puedes dar marcha atrás.

El desarrollo del cliente (UI) es en sí, un universo propio, y requiere de herramientas adecuadas para poderlo desarrollar de adecuadamente.

Ambos enfoques me agradan y he usado ambos en varios proyectos. Sin embargo, me siento más atraído hacia las JSON API + SPA debido a la clara separación entre front end y back end.

Preliminares

Commit inicial

Para generar el proyecto y hacer el primer commit:

rails new rails_app --database=postgresql
cd rails_app
git init
git add .
git commit -m "Commit inicial."

Configuración inicial

Agrega estas gemas a tu Gemfile:

group :development, :test do
  ...
  # Framework para pruebas
  gem 'minitest-rails'
  # Para generar objetos de prueba
  gem 'fabrication'
  # Para generar datos de prueba
  gem 'faker'
end
 
# Escribe las vistas en Slim en vez de HTML
gem 'slim-rails'
# Crea formularios de manera concisa
gem 'simple_form'

Después en la terminal:

bundle
rails g minitest:install
rails g simple_form:install

Modifica config/application.rb:

config.time_zone = 'Mexico City'
config.i18n.default_locale = 'es-MX'
 
config.generators do |g|
  g.test_framework :minitest, :spec => true, :fixture => false
end

Crea un usuario y una base de datos para esta aplicación, revisa ls guía: Cómo instalar PostgreSQL en Ubuntu

Configura el host, username y password en config/database.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  host: localhost
  user: usuario_ejemplo
  password: xxx

Ejecuta en la terminal:

rake db:create

Descarga el archivo es-MX.yml y ponlo en: config/locales/es-MX.yml
Lista de localizaciones para Rails

Modifica config/initializers/inflections.rb:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.clear
 
  inflect.plural(/$/, 's')
  inflect.plural(/([^aeéiou])$/i, '\1es')
  inflect.plural(/([aeiou]s)$/i, '\1')
  inflect.plural(/z$/i, 'ces')
  inflect.plural(/á([sn])$/i, 'a\1es')
  inflect.plural(/é([sn])$/i, 'e\1es')
  inflect.plural(/í([sn])$/i, 'i\1es')
  inflect.plural(/ó([sn])$/i, 'o\1es')
  inflect.plural(/ú([sn])$/i, 'u\1es')
 
  inflect.singular(/s$/, '')
  inflect.singular(/es$/, '')
 
  inflect.irregular('el', 'los')
end

Realiza el commit con los cambios en la configuración.

git add .
git ci -m "Configuración inicial."

¡Listo, a desarrollar! 😀

Recursos

Inflexiones en español para Rails
Configurar usuario y base de datos en PostgreSQL

Cómo instalar PostgreSQL 9.4 en Ubuntu 14.10

Abre una terminal y teclea:

sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev

Esto instala el cliente y servidor de la base de datos y algunos scripts de utilería. El paquete de libpq-dev nos servirá para poder compilar la gema Ruby para PostgreSQL más adelante.

Confirma que la instalación terminó adecuadamente tecleando:

psql --version

En mi caso la respuesta fue:

psql (PostgreSQL) 9.4.1

PostgreSQL Ruby gem

Si planeas usar PostgreSQL con Ruby, necesitarás esto:

gem install pg

En Rails, puedes crear una aplicación configurada para usar PostgreSQL así:

rails new mi-nueva-aplicacion -d postgresql

Cómo crear un usuario en la base de datos para la aplicación Rails

Para crear un usuario llamado usuario_ejemplo que puedas usar en tu database.yml, teclea:

sudo su postgres -c psql
CREATE USER usuario_ejemplo WITH PASSWORD 'xxx';
ALTER ROLE usuario_ejemplo WITH CREATEDB;
\q

Luego en tu database.yml configura el ambiente development, hay otros dos que también debes configurar: test y production:

development:
  adapter: postgresql
  encoding: unicode
  database: usuario_ejemplo
  pool: 5
  username: usuario_ejemplo
  password: xxx
  host: localhost

Asigna el host en database.yml

Es posible que al ejecutar algún comandos de base de datos (rake db:create, rake db:migrate), te encuentres con un error que dice algo como:

FATAL: Peer authentication failed for user “X”

Para evitarlo necesitas editar el archivo config/database.yml de tu aplicación y agregar la siguiente línea en las tres configuraciones (development, test y production):

host: localhost

¡Listo! 😀

Tuneando PostgreSQL

Es importante tunear el servidor PostgreSQL para tener un buen rendimiento cuando despliegues en un ambiente de producción.
Checa esta excelente guía: PostgreSQL: HW Tunning

Recursos

PostgreSQL add or create a user account and grant permission for database
Install PostgreSQL on Ubuntu 8.04 (cómo acceder a tu DB desde otras máquinas en la red).
Switching Rails to PostgreSQL
PostgreSQL — Guía Ubuntu Wiki
Is there a way to break into a PostgreSQL database if you forgot the password?
Improving the Command-Line Postgres Experience

Cómo instalar PostgreSQL en Ubuntu 11.04

[singlepic=668,160,,,left]

Acabo de incorporarme a un proyecto en Rails en el que usan PostgreSQL, y como recién formateé y le puse Ubuntu 9.04 a la laptop, necesito ahora instalar este manejador de base de datos.

Y es un buen pretexto para por fin escribir la guía de cómo instalarlo en Ubuntu.

Como siempre, vamos a la terminal (Aplicaciones → Accesorios → Terminal) y tecleamos:

  1. sudo apt-get install postgresql postgresql-client postgresql-contrib libpq-dev pgadmin3

Eso instala el cliente y servidor de la base de datos, algunos scripts de utilería y la aplicación pgAdmin para administrar la base de datos. El paquete de libpq-dev nos servirá para poder compilar la gema Ruby de PostgreSQL más adelante.

Confirmemos que la instalación terminó adecuadamente teclando:

  1. psql --version

En mi caso la respuesta fue:
psql (PostgreSQL) 8.4.7

Cambiar la contraseña del usuario administrador

Ahora necesitamos establecer la contraseña del usuario administrador postgres. Teclea la siguiente línea en la terminal (cambia la palabra password por la contraseña que desees usar):

  1. sudo su postgres -c psql
  2. ALTER USER postgres WITH PASSWORD 'password';
  3. q

Eso altera la contraseña dentro de la base de datos, ahora necesitamos hacer lo mismo para el usuario Linux postgres:

  1. sudo passwd -d postgres
  2. sudo su postgres -c passwd

Te aparecerá un prompt, introduce la misma contraseña que pusiste antes.

Poner a punto pgAdmin

Listo, de ahora en adelante podemos usar pgAdmin o la terminal para administrar nuestra base de datos como el usuario postgres. Pero antes de que te metas a pgAdmin deberías configurar el PostgreSQL Admin Pack, que te permite llevar un mejor registro y monitoreo de tu base de datos.

Ejecuta lo siguiente desde la línea de comandos en tu terminal:

  1. sudo su postgres -c psql < /usr/share/postgresql/8.4/contrib/adminpack.sql

Para ejecutar pgAdmin ve a tu menú de aplicaciones:
Aplicaciones → Programación → pgAdmin III

Cambiar el esquema de autentificación de PostgreSQL

Al ejecutar algunos comandos de base de datos, es posible que te encuentres con un error que dice algo como:

FATAL: la autentificación Ident falló para el usuario «x»

Para evitarlo necesitas editar el archivo /etc/postgresql/8.4/main/pg_hba.conf y cambiar el esquema de autentificación. Abre el archivo con privilegios de root:

  1. sudo gedit /etc/postgresql/8.4/main/pg_hba.conf

Y cambia esto:

  1. # Database administrative login by UNIX sockets
  2. local   all         postgres                          ident

Por:

  1. # Database administrative login by UNIX sockets
  2. local   all         postgres                          md5

Reinicia el servidor de PostgreSQL tecleando en tu terminal:

  1. sudo /etc/init.d/postgresql restart

PostgreSQL Ruby gem

Si planeas usar PostgreSQL dentro de Ruby, necesitarás esto:

  1. gem install pg

Si deseas instalar la gema desde código fuente, sigue estas instrucciones.

En Rails 3, puedes crear una aplicación configurada para usar PostgreSQL con este comando:

  1. rails new mi-nueva-aplicacion -d postgresql

¡Listo! 😀

Recursos

Install PostgreSQL on Ubuntu 8.04 (cómo acceder de manera remota a tu servidor)
Switching Rails to PostgreSQL