Introducción a
Ruby on Rails desde cero
www.desafiolatam.com
Versión 0.712
Versión 0.712
2) Motivación ¿Qué es Ruby on Rails? ¿Por qué utilizar Ruby on Rails para mi aplicación? Desventajas de utilizar Ruby on Rails ¿Cómo está estructurado este libro? Sección I: Front-end con Rails 3) Instalando las herramientas OSX Linux En Linux y OSX 4) Estructura básica de un proyecto de Ruby on Rails R ails 5) Creando nuestra primera página web con Rails Consola secuestrada. Creando nuestra primera página Creando nuestra segunda página 6) Agregando imágenes a nuestra primera página Los Assets El asset_path 7) Nuestra primera página con layout El Layout Incorporando CSS Incorporando Javascript Incorporando imágenes (u otros assets) dentro del CSS y del JS Consecuencias de Sprockets Incorporando Bootstrap. Vistas parciales
Cargando un layout distinto Desafío 8) Creando un formulario de registro El tag form Guardando los datos Guardando los usuarios dentro de Rails Cambiando la página de inicio Desafío 9) Formulario 2.0 Creando un proyecto nuevo Enviando un formulario por POST Mostrando todos los usuarios en la base de datos Desafío 10) El Gem!le Sección II: Deployment 11) Deployment en Heroku Tipos de hosting Instalando el Toolbelt de Heroku Claves SSH Repositiorio Git Subiendo la aplicación a Heroku Desafío 12) Con!gurando el dominio (o subdominio) Con!gurando dominios cuyas autoridades no soportan redireccionamiento tipo CName Tips de mantención Desafío Sección III: SQL y modelado de bases de datos
13) SQL ¿Qué es SQL? PostgreSQL Instalando PostgreSQL en OSX Instalando PostgreSQL en Linux Entrando a PSQL Problemas típicos de Con!guración de PostgreSQL El dilema del usuario y de la base de datos Nuestros Primeros pasos en SQL Manipulando valores de una tabla Modi!cando una tabla Constraints Ventajas de la clave primaria Tablas con valores autoincrementales Ordenando los resultados. Distinct y count Agrupando datos Guía de ejercicios 14) SQL con más de una tabla Integridad referencial Joins Explain Tipos de relaciones La clave foránea Ejercicios 15) Modelando con SQL Modelando un blog
Ejercicio Modelando Tinder Ejercicios de diagrama Ejercicios de SQL Modelando un carro de compras Ejercicio Sección IV: Back-End con Rails 16) Rails con PSQL Instalando Postgre en un proyecto existente Creando un proyecto con postgreSQL El error de socket 17) Los modelos en Rails Los modelos como mapas a los objetos (ORM) Creando modelos Migraciones El archivo schema.rb Creando migraciones. Creando una FK con índice. Getters y setters El archivo seed Atributos virtuales Ejercicio 18) Reglas del negocio Protegiendo la integridad de los datos Validando la presencia de un campo Validando que el campo sea único Validaciones custom
Valores iniciales Callbacks Ejercicios 19) Relaciones entre modelos Relaciones 1 a 1 Gra!cando las relaciones Relaciones de 1 a n 20) Testing unitario de modelos La Carpeta de Tests Estructura de un test de modelo Corriendo tests Los !xtures Cargando los !xtures en los tests Fixtures y relaciones Otros tipos de testing 21) Creando un Blog Construyendo el modelo Construyendo los tests Desa!os 22) MVC Arquitectura REST Sca" old old Strong parameters Probando los strong params 23) El archivo de rutas a fondo Introducción al archivo de rutas Rake routes a fondo
El archivo routes a fondo Resources 24) Rutas anidadas y métodos REST anidados Introducción a rutas anidadas Creando un sca" old old anidado Testeando Tes teando una ruta anidada Obteniendo y mostrando los resultados. El detalle del tweet Formulario para un nuevo tweet Creando el método create 25) Relaciones N a N Introducción a relaciones N a N Creando modelos con has_and_belongs_to_many Agregando elementos Borrando la asociación: Tests para la relación Implementando relaciones con has_many :through Has_many through vs Has_and_belongs_to_many 26) Haciendo un cloudtag Creando datos para la nube de tags Creando el controller y cargando los datos para hacer la nube de tags Creando la vista con la nube de tags 27) Devise Empezando con devise Creando el modelo de devise Ingreso, registro y salida Login or logout
El objeto current_user Modi!cando los formularios de ingresar y registro Agregando un dato al modelo de usuarios Bloqueando el acceso Recuperando la contraseña 28) Devise avanzado Agregando el rol de usuario Testeando los accesos Códigos completos: Generando los controllers de devise Cambiando la página después de registrarse Cambiando la página después de ingresar Con!gurando action_mailer para enviar correos con gmail Protegiendo las claves con dot-env Con!gurando Heroku para dot-env Quiz 29) Autorización con CanCanCan ¿Cuándo no utilizar CanCanCan? Big picture Instalando CanCanCan El árbol de habilidades El método can Los roles Revisión de habilidades Bloqueo y carga Manejo de conexiones no autorizadas Probando las habilidades en la consola
Habilidades basadas en la propiedad Habilidades en recursos anidados 30) Polimor!smo 31) Subiendo archivos con carrirewave Instalando carrierwave Generando el uploader Probando desde rails console. Creando una formulario con archivos 32) Amazon S3 Con!guración para la gema de carrierwave-aws IAM Agregando las claves de entorno a Heroku 33) Optimización !nd_each
N+1 queries en Ruby on Rails N+1 en conteo Contando con includes Contando con SQL Contando con left join La gema bullet Desnormalización y Counter caché 34) Javascript, jQuery y Turbolinks ¿Cómo organizar nuestro javascript? Turbolinks Ejemplos de uso 35) AJAX, Remotes y UJS ¿Para qué sirve AJAX?
UJS 36) El método .ajax 37) Manejo de grá !cos Haciendo los queries Generando los grá!cos Construyendo un calendario de eventos con Rails y Fullcalendar Setup del proyecto Setup de FullCalendar Agregando eventos al calendario 39) Envío de correos con Action Mailer Intro Creando nuestro mailer Modi!cando el mailer y como probarlo Enviando el correo usando ActionMailer y Gmail ActionMailer y Devise ActionMailer y ActiveJob: deliver_now, deliver_later? 40) Testings automatizado con Guard Instalar Guard en nuestro proyecto Con!gurar Guard Con!gurar Minitest-Reporters Correr Guard para automatizar el testing Sección V: Deployment avanzado con Amazon y VPS 41) Rails y Nginx con Passenger en Ubuntu: Preparando nuestro entorno de producción (DigitalOcean). Introducción Acerca de esta guía. Convenciones. Paso 0 – Como acceder a nuestro servidor
Con!gurar el timezone en nuestro servidor Acerca del usuario Root ¿Cómo ingresar sin tener que ingresar la clave cada vez que nos queremos conectar a nuestro servidor? Paso 1 – Instalación de RVM Paso 2 – Instalación de Ruby y de Rails Paso 3 – Instalación de Nginx y Passenger Paso 4 – Habilitando Passenger en Nginx Paso 5 – Instalación y con !guración de Postgres. Paso 6 – Crear un Server Block Paso 7 – Últimos detalles Extras 42) Deployment con Capistrano Introducción Paso 0 – La Aplicación Paso 1 – Añadir Capistrano a nuestra app. Paso 2 – Preparación de nuestro proyecto Paso 3 – Tareas personalizadas Paso 4 – Conectando el servidor con el repositorio Paso 5 – Deploy! Cómo se hace? y qué hace?
!" $%&'()*'+, -./0 12 3/45 %, 3)'627 Rails en un framework especializado en la construcción de aplicaciones web, su principales ventajas es que es sólido, rápido y escalable. La versión actual de Ruby on Rails es 5.0 y se publicó hace algunos días. Si bien este libro podría servir para utilizar la última versión, la documentación aun no esta completa y podría generar más de algún error. Es por eso que para efectos de este libro seguiremos utilizando la versión anterior (4.2.7) hasta que la documentación sea lo su!cientemente buena como para asegurar que no habrán problemas. Ruby no es lo mismo que Rails, el primero es un lenguaje de
programación orientado a objetos y el segundo es un conjunto de herramientas construidas en Ruby para la creación de aplicaciones web.
-8%9 :/0 /&'6';)9 3/45 %, 3)'62 <)9) =' )<6'*)*'+,7 Ruby on Rails es impresionantemente efectivo para la construcción de aplicaciones web, con sólo un par de líneas de código puedes tener una mini aplicación web funcionando. Además trae un conjunto de herramientas que permiten crear aplicaciones complejas y escalables a niveles enterprise con equipos de programación relativamente pequeños. Por otro lado también es sorprendentemente rápido para la
construcción de prototipos. Para una persona entendida en el tema es posible crear un prototipo funcional de un proyecto y publicarlo en internet en sólo un par de horas.
>12(1,&)?)2 @1 /&'6';)9 3/45 %, 3)'62 Es un framework complejo y Ruby no es tan masivo como otros lenguajes como PHP, por lo que cuesta un poco más encontrar programadores. Sin embargo tiene una muy buena comunidad y es fácil encontrar documentación y componentes para todo lo que necesitas. Además día a día el mundo de la informática ha empezado a reconocer las ventajas de Ruby on Rails y esta comenzando a migrar a este maravilloso framework. Ruby on Rails tiene muchos componentes -que vamos a discutir a lo largo del libro- que dan la impresión de que funcionan solas o por arte de magia. Es por esto que su curva de aprendizaje es bastante dura a pesar de ser un poderoso framework cuando se le domina. Finalmente está el tema del rendimiento que, al estar creado en base a varios componentes, tiene un gran footprint. Eso signi !ca que es pesado y conlleva a que se necesiten servidores más potentes para atender la misma cantidad de usuarios, toda una contraposición a la facilidad con que se construyen aplicaciones en este framework en comparación a otros. Tanto Ruby como Ruby on Rails están pensados en la felicidad del programador en lugar de la e !ciencia del programa.
-A+=% 12&B 12&9/*&/9)@% 12&1 6'49%7
Este libro cumple dos funciones; en primer lugar ser una guía práctica de aprendizaje y en segundo contener los pasos necesarios para construir diversos proyectos tipos, de los cuales se pueden sacar varias ideas para emprendimientos. Este libro se compone en 5 grandes secciones.
Front-End con Rails:
Veremos todo lo necesario para crear páginas web con Rails y a manejar correctamente el asset_path, crear pequeños formularios y entender los conceptos básicos de MVC.
Deployment:
Subiremos aplicaciones a la web y aprenderemos a con !gurar una página .com o cualquier otro tipo de dominio.
SQL y modelado de bases de datos
Estudiaremos lo necesario para a manejar y entender las bases de datos y su funcionamiento en Rails, como se realizan las consultas y como se optimizan.
Back-End con Rails
Aprenderemos a construir aplicaciones web con bases de datos y autenticación de usuarios, con controles de acceso y con sistemas de pago.
Deployment avanzado con Amazon y VPS
Finalmente aprenderemos a subir nuestra aplicación a entornos enterprise como Amazon o un VPS y con !guraremos nuestros propios servidores ocupando NginX.
C1**'+, DE F9%,&G1,@ *%, 3)'62 En esta sección estudiaremos todo lo referente a vistas o layouts.
I" D,2&)6),@% 6)2 J199)='1,&)2 H4?1&'(%2 1. Instalar la herramientas necesarias para trabajar con Ruby on Rails 2. Conocer las ventajas de RVM
HCK Utilizando la versión de Ruby que viene instalada de fábrica instalaremos Homebrew, un administrador de paquetes para OSX. Para eso abriremos la terminal y pegaremos lo siguiente:
1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/i
L',/M No es necesario instalar ningún administrador de paquetes, la mayoría de las distribuciones viene con alguno incluido. Por ejemplo Ubuntu ocupa apt-get.
N, L',/M 5 HCK Ahora instalaremos RVM, un programa que nos permite tener diversas versiones de Ruby instaladas y actualizarlas sin
problemas. Existen otros como Rbenv y chruby, las diferencias son menores y sólo afectarán en la última parte de deployment así que para uniformar el proceso recomendamos a todos instalar RVM. Correr este comando sólo en OSX
1
brew install rvm
Correr este comando sólo en Linux
1
apt-get install rvm
Es importante leer siempre los logs de la instalación para asegurarnos que haya terminado exitosamente y estar atentos a poner los comandos que nos pida en caso de requerirlos. Una vez que hemos instalado RVM y leído todos los logs (para asegurarnos de que todo se instaló correctamente), reiniciaremos la terminal para instalar la última versión de Ruby:
1
rvm install 2.3.1
Esta instalación puede demorar ya que necesita compilar los binarios de Ruby. Una vez terminado el proceso debemos veri !car qué es lo que se instaló y lo haremos con el comando:
1
rvm list
Eso nos mostrará todas las versiones de Ruby instaladas con RVM, de las cuales podemos escoger una con: