Encore plus productif avec ruby on rails

Publié le 15 juin 2011 par Martin Catty | outils

Cet article est publié sous licence CC BY-NC-SA

Améliorer son environnement de développement Ruby on Rails

Si vous utilisez déjà Ruby on Rails (si vous hésitez encore, jetez un œil à pourquoi choisir ruby on rails) vous vous dites sûrement que rails est déjà très productif out of the box, et vous avez raison.

Base de donnée, serveur embarqué, nul besoin d’un IDE ; tout est là pour commencer à prototyper rapidement. Mais les outils évoluent et il est possible de faire encore mieux.

Pow

Pow est un outil qui embarque à la fois un mini serveur DNS et HTTP. L’installation se borne à l’exécution d’un script sh.

curl get.pow.cx | sh

Le script va récupérer la dernière version et s’installer au démarrage. Attention le script nécessite mac os x 10.6 pour fonctionner, même si une branche linux existe sur ce fork.

L’objectif de pow est de charger vos applications à la demande, il suffit pour cela de faire un lien symbolique dans le dossier ~/.pow

ln -s /mon/app ~/.pow/

Une fois réalisé, faites pointer votre navigateur sur http://app.dev

Le serveur web embarqué est nack. C’est un serveur rack basé sur node.js

Pour les applications rails 3 il n’y a rien à faire, pow s’accommode parfaitement de bundler et rvm.

Pour les applications rails 2 il faut fournir un fichier rackup, qui explique à n’importe quel serveur compatible rack comment booter l’application.

Ce fichier se présente sous cette forme:

require File.dirname(__FILE__) + '/config/environment'
run ActionController::Dispatcher.new

Au delà d’un certain temps (5 min par défaut, configurable dans ~/.powconfig) d’utilisation, l’app sera arrêtée et déchargée.

Si vous avez besoin de forcer le re-chargement de l’application il suffit de faire un:

touch tmp/restart.txt

comme avec passenger. Mais le rechargement forcé devrait être de l’histoire ancienne grâce à l’outil suivant.

Guard

Guard est un outil de détection et de gestion des événements relatifs au système de fichier. Sa force est d’être cross-platform en s’appuyant sur des outils éprouvés selon le type d’OS.

Cela permet par exemple d’exécuter une action lors du changement d’un fichier. Exemples:

  • Concaténer et minifier le javascript de production lorsque les fichiers sources sont modifiés.
  • Relancer la série de tests automatiquement à la sauvegarde des fichiers de test.
  • Relancer le serveur web lorsqu’un fichier de conf est modifié …

Guard s’installe comme n’importe quelle gem, il suffit de l’ajouter au Gemfile.

Ensuite on crée notre Guardfile avec: guard init.

Guard possède un certain nombre de modules complémentaires. Il y en a par exemple un pour s’interfacer avec pow. Dans le Gemfile:

group :development do
  gem 'guard-pow'
end

Et enfin:

guard init pow

Cela vous crée le fichier Guardfile suivant:

guard 'pow' do
  watch('.powrc')
  watch('.powenv')
  watch('.rvmrc')
  watch('Gemfile')
  watch('Gemfile.lock')
  watch('config/application.rb')
  watch('config/environment.rb')
  watch(%r{^config/environments/.*\.rb$})
  watch(%r{^config/initializers/.*\.rb$})
end

À la modification de l’un de ces fichiers guard va donc relancer pow automatiquement.

Livereload

Livereload pousse l’automatisation encore un peu plus loin.

Une fois la gem et l’extension (disponible pour safari, chrome, firefox 4) installée, dans le répertoire de l’application il suffit de lancer livereload en console puis de connecter le navigateur.

Une fois fait, chaque changement dans un fichier observé (vue, css, js…) entrainera un rechargement automatique du navigateur.

Il est bien sûr possible d’observer différents types de fichiers en ajoutant leur extension dans le fichier .livereload.

Livereload utilise les websocket pour communiquer avec le navigateur.

Enfin, il existe guard-livereload, qui s’installe comme les autres gem, pour ne plus lancer livereload manuellement.

Au final au lieu de lancer un rails server votre commande par défaut deviendra:

bundle exec guard

L’équipe Synbioz.

Libres d’être ensemble.