Blog tech

Les templates Rails

Rédigé par Alexandre Salaun | 22 mai 2012

Les templates, pour les applications Rails, sont des générateurs qui vous permettent, lors de la création de votre application, d’avoir une “base” à partir de laquelle vous allez pouvoir commencer votre développement. En effet, les templates vous permettent d’installer les gems souhaitées mais aussi, par exemple, de modifier des fichiers de configuration de l’application.

En dehors des templates, vous pouvez également créer un script qui vous permettra de créer et/ou modifier le squelette d’une application Rails ainsi que de modifier le contenu des fichiers.

Création de templates

Il est donc possible de créer des templates (qui ne sont autres que des générateurs) pour vos applications Rails. Elle vous permettront par la suite de gagner du temps si vos différentes applications ont une base commune.

Pour notre exemple, nous utilisons rvm pour gérer les versions de Ruby et Rspec pour les tests. Voici le contenu du fichier template.

# create .rvmrc file for rvm
create_file ".rvmrc", "rvm gemset use #{app_name}"

# add gems
gem 'mysql2'

gem 'devise'
gem 'haml'
gem 'simple_form'
gem 'whenever'
gem 'kaminari'
gem 'hpricot'
gem 'ruby_parser'
gem 'jquery-rails'

gem 'capistrano'
gem 'capistrano-ext'

gem "rails3-generators", :group => [ :development ]
gem "rspec-rails", :group => [ :development, :test ]
gem "ffaker", :group => :test
gem "autotest", :group => :test

# install gems
run 'bundle install'

# edit database config file
file 'config/database.yml', <<-END
development:
  adapter: mysql2
  database: development_database
  host: localhost
  username: username
  password: password
  encoding: utf8
  socket: /tmp/mysql.sock

test:
  adapter: mysql2
  database: test_database
  host: localhost
  username: username
  password: password
  encoding: utf8
  socket: /tmp/mysql.sock
END

rake "db:create"

generate 'simple_form:install'
generate 'rspec:install'

inject_into_file 'config/application.rb', :after => "config.filter_parameters += [:password]" do
  <<-eos

    # Customize generators
    config.generators do |g|
      g.stylesheets false
    end
  eos
end

# setup devise
generate "devise:install"
generate "devise User"
generate "devise:views"
rake "db:migrate"

# remove defaults files
remove_file 'public/index.html'
remove_file 'rm app/assets/images/rails.png'

# copy database.yml file
run 'cp config/database.yml config/database.example'

# add database.yml to .gitignore
run "echo 'config/database.yml' >> .gitignore"

# setup git and initial commit
git :init
git :add => "."
git :commit => "-a -m 'initial commit'"

say <<-eos
  ============================================================================
  Your app is now available.
eos

Vous avez donc, avec ce template, créé votre base de données, installé les gems nécessaires, configuré Devise ou encore initialisé votre dépôt Git. À partir ce fichier .rb vous pourrez générer vos futures applications. Il est possible, si besoin, d’ajouter, modifier ou supprimer des actions.

Il est possible de trouver sur le web différents templates afin de générer vos applications, sur le dépôt Github de RailsApps par exemple.

Utilisation des templates

Une fois que vous avez créer votre template ou bien que vous en avez récupéré un existant, vous pouvez donc l’utiliser pour générer votre squelette d’application. Pour cela, il suffit d’utiliser la commande suivante :

rails new my_app_name -m my_template.rb

Il est possible d’appeler une url plutôt qu’un fichier .rb si vous souhaitez utiliser un template pré-existant.

rails new my_app_name -m https://gist.github.com/722911.txt

Appliquer un template sur une application existante est également possible via la commande suivante :

rake rails:template LOCATION=my_template.rb

Un screencast de Ryan Bates est disponible sur la création de templates pour Rails 2.3.

Rails Apps Composer

Nous venons de voir qu’il était possible de créer soit même ses templates. Cependant, il existe des gems pour vous aider dans cette démarche.

RailsAppsComposer vous propose un certain nombre d’éléments afin de composer vous même des templates. Afin de pouvoir utiliser celle-ci il vous faut l’installer. Dans ce cas, on ne peut utiliser Bundler car nous n’avons pas encore d’application créée, il est donc nécessaire de passer par la commande suivante :

gem install rails_apps_composer

Une fois installée, vous pouvez voir la liste de tous les éléments que vous pouvez ajouter à votre application lors de la création de cette dernière via Rails App Composer :

rails_apps_composer list

On retrouve notamment dans cette liste Devise, Mongoid ou encore Git. Il est donc important de savoir quels sont les besoins du projet avant de créer l’application afin d’ajouter les outils intéressants.

À partir de cette liste vous pouvez faire votre choix parmi les outils proposés. Pour générer votre application avec ceux que vous avez choisi il vous faut utiliser la commande suivante :

rails_apps_composer new my_app_name -r devise haml

Il est également possible de modifier ou d’ajouter des outils dans les recettes existantes. Pour cela, vous pouvez cloner le dépot git de la gem puis remodeler ces recettes. Il est nécessaire d’installer la gem mg pour le développement de votre version de Rails App Composer. Plus d’informations sont disponibles sur la page Github.

Rails Templater

Rails Templater est une gem permettant de créer votre application. Tout comme pour RailsAppsComposer il faut installer cette gem via la commande gem install :

gem install rails_templater

Une fois terminé, vous pouvez créer votre application via la commande suivante :

templater my_app

Ensuite, la gem vous pose les questions nécessaires afin de savoir quelles sont les gems qui vous seront utiles. Votre application sera donc créée avec les gems choisies et vous pourrez ensuite commencer le développement de cette dernière.

Conclusion

Il est donc possible de créer des templates (ou d’utiliser des templates existantes) pour vos applications, ce qui aura pour conséquence de vous faire gagner du temps lors de la création de vos prochaines applications. En effet, le fait de générer automatiquement la “base” ce ces dernières via un générateur vous évite de refaire à chaque création les mêmes manipulations.

Le temps que vous allez pouvoir consacrer à la création de votre template va être rentabilisé par la suite lors de la création de nouvelles applications, il ne faut donc pas se laisser décourager par l’investissement initial en temps.

L’équipe Synbioz.

Libres d’être ensemble.