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.
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.
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
.
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
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:
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.
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
El código final lo tienes disponible en Github y puedes verlo funcionando en Heroku.
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.