Fuente imagen: kyan.com

Un WorkFlow para iniciar un proyecto Rails

Matías Mascazzini
Memorias de un Techie
7 min readOct 29, 2015

--

Estoy empezando otra aplicación en Ruby on Rails, y si bien ya es el 3re. proyecto que encaro sólo no tengo bien en claro ni en mi memoria todos los pasos a seguir. Así que esta vez decidí documentar los pasos seguidos e ir tomando notas para futuras versiones.

Espero que los que sepan un poco más, puedan dar su Feedback y así mejorar estas notas con Buenas Practicas y formas alternativas.

NOTA: son 2 guiones del medio (-) Medium me los formatea en este articulo. El símbolo $ significa que es un comando que se ejecuta en la terminal de tu sistema operativo y no lo debes escribir en tu terminal.

Estoy usando un sistema operativo Linux (Debian), en cual ya tenia instalado lo básico para trabajar con Ruby. Así que esa parte la dejo pendiente para otro documento.

# Crear repositorio de archivos.

  • Crear nuevo repo. en git.
$ git init

# Vincular con GitHub.

  • Crear el repositorio en GitHub. Parece que por consola no se puede, sin usar la API de ellos.
  • Luego de crear el repo.
$ git remote add origin https://github.com/matiasmasca/probando-github.git

# Para bajarte los archivos que crea GitHub.

$ git pull origin master

# Luego es mejor ir creando ramas, y no hacer push a la rama master.

$ git push origin master

RVM Project Workflow

RVM es una aplicación de linea de comandos para manejar diferentes entornos de Ruby, en una misma maquina podemos tener varias versiones de Ruby. Además con los gemset te crea un espacio donde se guardan las Gemas (librerías externas) de nuestra aplicación.

# Si no funciona RVM, en tu consola ejecuta:

$ /bin/bash --login
  • Crear GemSet en RVM
$ rvm gemset create miGemsetApp$ rvm gemset use miGemsetApp$ rvm gemset use ruby-2.2.0@miGemsetApp

#Antes.

$ rvm --rvmrc ruby-2.2.0@miGemsetApp # Esto crea el archivo .rvmrc que necesita permisos de confianza para ejecutar lo que tenga adentro.

#Nuevo Workflow.
Crear archivo: .ruby-version

$ rvm --ruby-version use ruby-2.2.0

Crear el archivo: .versions-conf

$ rvm --create --versions-conf use ruby-2.2.0@miGemsetApp

Crear archivo: .gemrc
Con el siguiente contenido, para que no instala la documentación.

gem: --no-ri --no-rdocinstall: --no-rdoc --no-ri update: --no-rdoc --no-ri

# Nota: para trabajar Off-line con RVM https://rvm.io/rvm/offline

# Crear app. rails.

# Crear RAMA.

$ git checkout -b NombreRama

# Para una mejor Guía: http://guides.rubyonrails.org/getting_started.html

$ gem install rails$ rails new NombreApp
  • Ingresas a la carpeta donde se creo la app.
$ cd NombreApp
  • Instalas las gemas por defecto que incluye rails, con:
$ bundle install --without production 

#el “without” es para evitar errores por la base de datos PG y otras gemas que se usen solo en producción.

  • Si todo salio bien, podes iniciar la aplicación y ver una pantalla similar a la de la imagen:
$ rails s
Primera pantalla de Rails

# Para crear un nuevo secret:

$ rake secret
  • Mover la gema sqlite3, a entorno Development y Test porque heroku no tiene soporte para sqlite.

# Comitiar cambios.

$ git add .$ git commit -m “Empezando proyecto”$ git push origin NombreRama

# Crear app. en Heroku

Se lo puede hacer desde una Terminal si instalas el Heroku Belt

Identificarse en Heroku, pide mail y contraseña.

$ heroku login$ heroku apps:create nombreapp

push to heroku

$ git push heroku master

Abrir aplicación.

$ heroku open

Abrir pagina de Heroku y crear las Variables de Entorno necesarias para tu aplicación, por ejemplo lo relativo a la base de datos.

# Crear C.I.

Una mejor guía en: http://docs.travis-ci.com/user/deployment/heroku/

Vincular con GitHub.

  • Ingresar a Travis-CI
  • Vincular con GitHub y Sincronizar los repos.
  • Activar para nuestro repo.
  • Esto modifica la config. en GitHub.

Otra forma de vincular con Travis-CI:

  • Habilitar el Servicio en GitHub.
  • Ingresar en opcion: settings
  • Ingresar en: Webhooks & Services

Luego de vinculado.

# A mano.

  • Crear un archivo de texto “.travis.yml”
  • Y configurar en el todo lo relativo al deploy. Más info. aquí.
  • Agregar el Acceso al servidor de la aplicación Heroku. En Heroku tu API esta en la configuración de tu usuario. “Manage Account” y luego en “Account”, abajo de todo dice: API Key.
  • Agregar SECRET de Heroku para el despliegue, pero tiene que estar encriptado.
$ travis encrypt --token ACCESS-TOKEN

# Gema Travis: para hacer todo esto más sencillo podes usar la gem travis. Que te instala una interfaz por linea de comandos. Primero

$ gem install travis

y luego por ejemplo:

$ travis setup heroku

esto te genera automáticamente el archivo “.travis.yml”

- Con Cucumber, hay que activar para que de salida 0, si hay pendientes de implementación porque sino lo interpreta como un error y cancela el proceso. Tiene que ver con el modo — strict de Cucumber.

Devise.

Una mejor guia en: devise.plataformatec.com.br/#starting-with-rails
- Agregar Devise al gemset: gem ‘devise’
- Ejecutar:

$ rails generate devise:install

- Ejecutar:

 $ rails generate devise MODEL

- OPCIONAL, crear las vistas:

 $ rails generate devise:views

2. Instalar devise.
Esto instala las gemas: bcrypt, orm_adapter, responders, warden, devise

Te aparece el mensaje:

=======================================Some setup you must do manually if you haven’t yet:1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb:config.action_mailer.default_url_options = { host: ‘localhost’, port: 3000 }In production, :host should be set to the actual host of your application.2. Ensure you have defined root_url to *something* in your config/routes.rb. For example:root to: “home#index”3. Ensure you have flash messages in app/views/layouts/application.html.erb. For example:<p class=”notice”><%= notice %></p> <p class=”alert”><%= alert %></p>4. If you are deploying on Heroku with Rails 3.2 only, you may want to set:config.assets.initialize_on_precompile = falseOn config/application.rb forcing your application to not access the DB or load models when precompiling your assets.5. You can copy Devise views (for customization) to your app by running:rails g devise:views=======================================

2.1 Revisar configuraciones manuales:

2.1.1 Buscar el archivo ‘development.rb ‘ y configurar el tema de los mails: config.action_mailer.default_url_options = { host: ‘localhost:3000’ } 2.1.2 Revisar que este definida una ruta por defecto: root to: “home#index” 2.1.3 Revisar los mensajes Aler y Error, en el layout de la aplicación. <p class=”notice”><%= notice %></p> <p class=”alert”><%= alert %></p> 2.1.4 Setear para que no accesa a la DB cuando pre compila para subir a Heroku, en el archivo config.application.rb: config.assets.initialize_on_precompile = false 2.1.5 Setear en ese mismo archivo, para poner Devise en español: config.i18n.default_locale = :es NOTA: si queres traducir al español, tendrás que crear una copia del archivo: config/locales/devise.en.yml y llamarlo: devise.es.yml

3. Agregar devise, a un modelo.
rails generate devise MODEL

$ rails generate devise User

Antes de hacer el migrate podes modificar el archivo _devise_create_MODEL.rb

$ rake db:migrate

Agregar el resource en el archivo de Rails /config/“routes.rb”

resources :users

4. Setear la URL por defecto “default URL”, en el archivo config/environments/development.rb:

config.action_mailer.default_url_options = { host: ‘localhost’, port: 3000 }

5. [Opcional] Generar las vistas de Devise, para customizarlas:

$ rails generate devise:views users

6. Integrar Login.
7. Si tenes campos personalizados, distintos a los que propone Devise, vas a tener que agregar a app.controler un método para permitir esos parámetros: “configure_permitted_parameters” con el helper de devise: devise_parameter_sanitizer
8. Si te falla por un “undefined local variable or method ‘resource’”, tenes que agregalo en el helper de esa vista.

# Base de Datos.

- Crear base de datos en Heroku. Generalmente agregando la versión gratuita de Postgres
- En Heroku agregar las variables de entorno a la aplicación: DATABASE_NAME, DATABASE_USER, DATABASE_PASS, DATA_BASE_URL

  • Modificar el archivo config/“database.yml”, agregar los datos de la base de datos en producción.
production:
adapter: postgresql
encoding: unicode
pool: 5
database: <%= ENV["DATABASE_NAME"] %>
username: <%= ENV["DATABASE_USER"] %>
password: <%= ENV["DATABASE_PASS"] %>
host: <%= ENV["DATABASE_URL"] %>
port: 5432

De esta manera, con variables de entorno, nuestros datos secretos quedan a salvo.

  • Agregar las gemas de producción:
group :production do
#heroku pide esto.
#ruby '2.3.0'
gem 'pg' #base de datos PostgreSQL
gem 'rails_12factor' #algo de heroku para archivos estaticos.
end

Y por Heroku, que no tiene soporte para SQLite, tenes que meter esa gema en el grupo de Desarrollo.

group :development, :test do
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
end

Ejecutar en consola, porque modificaste el gemfile:

bundler install --without production 

# Vincular con Boostrap.

A mi me gusta de entrada vincular mi proyecto con Boostrap así voy viendo las interfaces como queda.

<< faltan los pasos para agregar Boostrap a un proyecto Rails >> Si quieres colaborar en eso seria genial ;)

# Scaffold

Los scaffold son una de las herramientas más poderosas de Rails, por defecto te arman todo el CRUD (o AMB L) de una entidad lo que te va generando una productividad muy buena y rápidamente podes ver resultados sobre tareas comunes y repetitivas.

$ rails generate scaffold Group nombre:string sexo:integer quota:integer extended_quota:integer initial_age:integer maximun_age:integer$ rake db:migrate

# Aplicarle el Boostrap.

# Agregar validaciones al modelo.

# Agregar filtros de Devise, en los controller.

Cuando queres que solo los usuarios logueados vean algo, agregale:

before_action :authenticate_user!

Continuará =D … esto es sólo un apunte público. Lo voy editando a medida que lo uso en algún proyecto.

#Problemas Comunes.

Building native extensions.

Si recibis errores de que no puede instalar estas gemas, previamente te conviene instalar esto:

  • gema sqlite3: apt-get install libsqlite3-dev
  • gema PG: sudo apt-get install libpq-dev

--

--

Matías Mascazzini
Memorias de un Techie

Workhorse Techie, software developer craftsmanship. I like Ruby http://ruby-lang.org, Ruby On Rails framework & drink mate. He/Him/él.