A la hora de crear una nueva aplicación, sea en el lenguaje que sea, antes de nada me pregunto que tecnologías voy a usar cómo que tipo de base de datos, qué framework css para los estilos, si usaré algún motor de plantillas para ayudarme en las vistas, y demás cosas que luego tendré que ir añadiendo a la aplicación y configurando para que todo funcione correctamente.
Pués bien, a la hora de generar una nueva aplicación en Rails, se le puede pasar un parámetro para especificarle una plantilla a partir de la cual generar la nueva aplicación. Una plantilla no es más que un fichero que contiene una serie de gemas, inicializadores y demás que quieres que se incluyan de manera predeterminada en tu aplicación.
$ rails new blog -m http://example.com/template.rb
Investigando sobre esto para la nueva aplicación que estoy desarrollando, encontré Rails Composer, un pedazo de plantilla que te genera el esqueleto de tu nueva aplicación a partir de una serie de preguntas que te va haciendo y así ahorrándote el tener que ir metiendo todas estas gemas y configurarlas una a una.
¿Cómo funciona?
Solo tenemos que lanzar la siguiente instrucción desde nuestra consola:
$ rails new myapp -m https://raw.github.com/RailsApps/rails-composer/master/composer.rb
Y a continuación ir contestando a las preguntas que nos va haciendo, seleccionando lo que prefiramos, para que la magia surta efecto :)
¿Qué nos aporta?
Para empezar, a parte de poder generar tu propia aplicación a la carta, tiene preestablecidas una serie de aplicaciones de ejemplo con diferentes tecnologías:
question Install an example application?
1) I want to build my own application
2) rails3-bootstrap-devise-cancan
3) rails3-devise-rspec-cucumber
4) rails3-mongoid-devise
5) rails3-mongoid-omniauth
6) rails3-subdomains
Como podeis ver, hay gran variedad de alternativas, como la típica pagina de prelaunch para que la gente intrduzca su email, apliaciones con mongodb y omniauth para poder registrarse con Twitter, Facebook, etc, hasta una con devise para la autenticación, cancan para la autorización e incluso twitter bootstrap para los estilos de las vistas. Yo elegí la primera opción para poder personalizarlo lo máximo posible, y estas son las opciones que nos da para ello:
question Web server for development?
1) WEBrick (default)
2) Thin
3) Unicorn
4) Puma
question Web server for production?
1) Same as development
2) Thin
3) Unicorn
4) Puma
question Database used in development?
1) SQLite
2) PostgreSQL
3) MySQL
4) MongoDB
question Template engine?
1) ERB
2) Haml
3) Slim
question Unit testing?
1) Test::Unit
2) RSpec
question Integration testing?
1) None
2) RSpec with Capybara
3) Cucumber with Capybara
4) Turnip with Capybara
question Fixture replacement?
1) None
2) Factory Girl
3) Machinist
question Front-end framework?
1) None
2) Twitter Bootstrap
3) Zurb Foundation
4) Skeleton
5) Just normalize CSS for consistent styling
question Twitter Bootstrap version?
1) Twitter Bootstrap (Less)
2) Twitter Bootstrap (Sass)
question Add support for sending email?
1) None
2) Gmail
3) SMTP
4) SendGrid
5) Mandrill
question Authentication?
1) None
2) Devise
3) OmniAuth
question Devise modules?
1) Devise with default modules
2) Devise with Confirmable module
3) Devise with Confirmable and Invitable modules
question Authorization?
1) None
2) CanCan with Rolify
question Use a form builder gem?
1) None
2) SimpleForm
question Install a starter app?
1) None
2) Home Page
3) Home Page, User Accounts
4) Home Page, User Accounts, Admin Dashboard
extras Add 'therubyracer' JavaScript runtime (for Linux users without node.js)? (y/n)
extras Set a robots.txt file to ban spiders? (y/n) n
extras Create a project-specific rvm gemset and .rvmrc? (y/n) n
extras Create a GitHub repository? (y/n)</pre>
Resultado
El resultado es espectacular. Te genera la aplicación dándote la posibilidad de elegir tu servidor favorito para desarrollo, tu motor de base de datos, tu sistema de test y fixtures que prefieras, framework front-end, soporte para envío de emails, autenticación y autorización, páginas de inicio, y si no fuera suficiente hasta te puede crear un repositorio de GitHub para que puedas empezar a commitear tu progreso desde el primer momento... y todo esto con una sola linea desde nuestra consola. Ahora podemos concentrarnos en empezar a desarrollar nuestra aplicación y dedicar nuestros esfuerzos a lo que realmente queremos resolver con ella :)
Love & Boards!