Introducción

Ya sea para un hackathon o para empezar un nuevo proyecto en su fase inicial tengo una serie hábitos que puede ayudarte desarrollar tus ideas mas rápidamente sin distracciones.

Ante todo dejar claro que lo que voy a comentar es completamente subjetivo y basado en mis gustos personales.

Iniciar el proyecto

Al lio:

rails new hack-project -d postgresql -B -C --skip-turbolinks

-d postgresql en vez de MySql o Sqlite3 porque todo lo que hagamos estará listo para desplegar en Heroku.

- B o --skip-bundle para evitar que haga el bundle install inicial.

- C o --skip-action-cable para evitar lo relacionado con ActionCable. A mi por lo menos me parece mejor no incluirlo en proyectos cuando buscas un prototipado rápido.

--skip-turbolinks Turbolinks puede ser una alternativa sencilla para dar mayor sensación de velocidad a nuestra web, pero para prototipados puede dar mas problemas que otra cosa.

Eliminar más gemas

Ya hemos quitado algunas gemas que vienen por defecto al comenzar nuestro proyecto, pero aún nos quedan algunas que no nos aportan gran cosa.

Spring hace que que arrancar el servidor, la consola o lanzar tareas rake sea más rápido, pero a veces nos da errores porque no recarga bien el código. Así que como nuestro proyecto está recién empezado y no tardará nada en arrancar mejor borrarlo.

Además a la larga será mejor porque seremos conscientes de como aumenta el tiempo de arranque de nuestra aplicación.

Eliminar: spring y spring-watcher-listen

Si no me hiciste caso en el primer paso, para eliminar Turbolinks solo tienes que borrar su gema del Gemfile y borrar el require de app/assets/javascripts/application.js.

Mis gemas favoritas

Siempre que puedo meto estas gemas porque me facilitan mucho el desarrollo.

gem 'haml-rails', "~> 0.9"
gem 'bootstrap-sass', '~> 3.3.6'
gem 'simple_form'
gem 'kaminari'


group :development, :test do
  gem 'rails-pry'
  gem 'pry-byebug'
  gem 'byebug', platform: :mri
end

Paso a paso:

haml-rails: Añade soporte para haml a la aplicación y cada vez que generes una vista sea en haml y no en ERB.


bootstrap-sass: Nos da todo lo necesario para usar Twitter Bootstrap listo para usar con Sprockets.

Renombra tu application.css a scss:

mv app/assets/stylesheets/application.{css,scss} 

Y añade:

# app/assets/stylesheets/application.scss 
@import "bootstrap-sprockets";
@import "bootstrap";

En application.js añade:

# app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require bootstrap-sprockets

Este layout me va bastante bien para empezar:

# app/views/layouts/application.html.haml

!!!
%html
  %head
    %meta{:charset => "utf-8"}/
    %meta{:content => "IE=edge", "http-equiv" => "X-UA-Compatible"}/
    %meta{:content => "width=device-width, initial-scale=1", :name => "viewport"}
    %title Admin
    = csrf_meta_tags
    = stylesheet_link_tag 'application', media: 'all'
  %body
    %nav.navbar.navbar-inverse
      .container
        .navbar-header
          %button.navbar-toggle.collapsed{"aria-controls" => "navbar", "aria-expanded" => "false", "data-target" => "#navbar", "data-toggle" => "collapse", :type => "button"}
            %span.sr-only Toggle navigation
            %span.icon-bar
            %span.icon-bar
            %span.icon-bar
          %a.navbar-brand{href: root_path} Admin
        #navbar.collapse.navbar-collapse
          %ul.nav.navbar-nav
            %li
              %a{href: '#'} Foo
            %li
              %a{href: '#'} Bar
    .container
      = yield
    = javascript_include_tag 'application'

Y borramos el original:

$ rm app/views/layouts/application.html.erb

simple_form me parece imprescindible en cualquier fase del proyecto para no perder tiempo haciendo formularios. Además el generador incorpora una opción para que los formularios se vean bien con Bootstrap.

rails generate simple_form:install --bootstrap

kaminari porque necesitamos paginación. Podemos usar también will_paginate pero me gusta más el DSL de este. Además incluye un generador de vistas para distintos frameworks CSS, entre ellos las distintas versiones de Twitter Bootstrap.


pry-byebug para poder hacer debugging like a boss.

Si pones binding.pry en cualquier parte de tu código al ejecutarse te permitirá hacer debug y navegar por el código que se está ejecutando. Pero presta atención de no incluir la gema en producción y mucho menos desplegar código que llame a binding.pry.

En este video puedes ver con más detalles como funciona:

Testing

Aunque sea una hackaton o un prototipo los tests son necesarios, esto te garantiza que no vas rompiendo el trabajo ya hecho y que lo que haces de verdad funciona.

Básicamente lo que uso es la suite que trae Rails por defecto, RSpec si puedo evitarlo mejor, me quito problemas de configuración además me parece que test-unit es suficiente.

Siempre añado factory_girl_rails porque me parece más comodo que las fixtures.

Deploy

La opción más sencilla de momento creo que es desplegar en Heroku, además de ser gratuito si no necesitas servicios externos.

Necesitarás tener una cuenta en Heroku y su toolbelt instalado.

Heroku te pedirá que especifiques la versión de ruby en el Gemfile:

# Gemfile

ruby '2.3.2'

Si estás en Rails 4 añade al Gemfile:

gem 'rails_12factor', group: :production

Crea un Procfile

web: bundle exec puma -C config/puma.rb

Si no lo tienes ya añade puma al Gemfile.

gem 'puma'

Y si no lo tienes crea el fichero config/puma.rb

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count
port        ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
plugin :tmp_restart

Si aún no tienes el proyecto en git inicializaló y comitea:

$ git init
$ git add .
$ git commit -m "first commit"

Creamos la app en heroku

$ heroku create

Y desplegamos:

$ git push heroku master
$ heroku run rake db:migrate 
$ heroku open

Si te da error mira los logs con

$ heroku logs -t

Ejemplo

El código final lo tienes disponible en Github y puedes verlo funcionando en Heroku.

Conclusión

Y poco más. Solo recuerda que no importa que tipo de proyecto sea: hackathon, pet project, demo o algo en producción, trata de mantenerlo sencillo y no hagas guarradas.

Todo lo anterior solo es una forma de poder ver tu proyecto un poco más bonito con menos trabajo y poder centrarte en la idea.


Comentarios