Retour au sommaire du support de cours

Un Gem est un paquet contenant un logiciel écrit en Ruby.
Un Plugin est aussi un paquet contenant un logiciel écrit en Ruby,
mais il n'est installé qu'au sein d'un projet Rails existant.
Pour une même fonctionnalité, il existe souvent un Gem, et presque tout le temps le Plugin équivalent.

(Dernière modification : 2011/09/14)
Cliquez sur la table des matières pour la cacher / développer :

Intérêt :

Le but du paquet Gem est d'apporter à votre projet une fonctionnalité bien définie, pour vous éviter de la ré-écrire.
Il existe des très nombreux Gems développés par d'autres : Qui très rapidement :

 

1) Installation :

1.1) Pré-requis :

Toutes les opération de gestion de paquet Gem sont effectuées par l'utilitaire gem,
qui doit être accessible à la ligne de commande si le paquet rubygem est bien installé.
Ce qui doit être le cas puisque l'environnement Rails a normalement été installé avec cet outil !
En effet Rails lui-même est un ensemble de Gems.
Note :
Il est pour l'instant recommandé de ne pas utiliser le paquet debian correspondant,
qui ne fait pas bon ménage avec les gems que vous installerez par la suite.

Une fois installé, un Gem est accessible dans tous vos projets,
à la différence d'un Plugin qui est lui installé dans un projet spécifique.
<A FAIRE : impact sur l'hébergement>

1.2) Instructions d'installation des Gems :

1.2.1) Sous Debian :

Par défaut (hors rvm), les Gems sont installés dans :
/var/lib/gems
Alors que Ruby est installé dans :
/usr/lib/ruby

Il faut donc mettre à jour votre variable d'environnement PATH dans un des scripst de démarrage de votre shell :
# Rubygem
export PATH=$PATH:/var/lib/gems/1.8/bin

1.2.2) Instructions compatibles tous O.S. :

Pour installer un Gem (mode verbose) :
gem [install|ins] -V <nom_gem>
  • En spécifiant un n° de version minimum :
  • gem ins -r progressbar --version '> 0.0.1'
  • En spécifiant son n° de version exact :
  • gem ins -r progressbar-0.0.3
  • En spécifiant un gem local :
  • gem install --local pkg/rails-cache-1.0.0.gem
  • Options :
  • -run-tests
  • Sans génération de doc (plus rapide) :
  • --no-ri --no-rdoc
Opérateur de sélection de version :
SpecificationFrom...To (exclusive)
>= 3.03.0
~> 3.03.04.0
~> 3.0.03.0.03.1
~> 3.53.54.0
~> 3.5.03.5.03.6

Obtention de la liste des gems qui sont obsolète (il y a une version plus récente disponible) :
gem outdated
Mise-À-Jour d'un Gem, ou de tous si l'on ne précise pas de nom :
gem update [nom_du_gem]
Mise-À-Jour du logiciel Rubygem lui-même :
gem update --system
Supprimer les versions de gems installés qui sont obsolètes, en laissant la nouvelle version mise-à-jour installée :
gem clean
Obtenir un graphe des gems installés :
#A executer avec un compte root
gem install graph
gem graph
Pour activer un gem dans un projet, une seule instruction suffit :
<TODO : l'instruction>

1.3) Utilisation : inclusion d'un Gem depuis un programme Ruby :

ruby -rrubygems .rb
ou
ruby -rubygems .rb
ou
export RUBYOPT=rubygems
Pour ne pas avoir à indiquer dans tous les fichiers :
require 'rubygems'
dans Rails :
dans le fichier de configuration d'un projet : config/environment.rb
#Rails 2, dans config/environment.rb
Rails::Initializer.run do |config|
	config.gem 'will_paginate', :version => '~> 2.3.11', :source => 'http://gemcutter.org'
end

#Rails 3, dans Gemfile à la racine du projet
gem 'will_paginate', :version => '~> 2.3.11'

#Gem local
gem 'translations_ennder', '1.1.0', :path => "../translations_ennder/pkg/translations_ennder-1.1.0"

1.4) Poser un Gem sur RubyGems (Ancien Gemcutter) :

RubyGems est le service d'hébergement de Gems de la communauté Ruby.
Sponsors : Thoughtbot, GitHub

1.4.1) Inscription sur RubyGem :

http://rubygems.org/sign_up
Puis confirmer l'inscription, avec l'URL reçue dans l'email d'enregistrement.

1.4.2) Préparer le Gem :

  • Génération du Gem
  • Au préalable, le fichier <nom_du_projet>-<majeur>.<mineur>.<patch>.gemspec doit avoir été généré.
    Pour cela, vous pouvez utiliser par exemple les Gems : bones ou jeweler.
    Pour recontruire un gem, depuis la racine du projet :
    gem build <nom_du_gem>.gemspec

  • Pour cela vous pouvez utiliser le Gem Bones :
  • L'intéret de bones est qu'il parcours automatiquement tous les réperores et fichiers et de votre racine pour les mettre dans le gem.
    • Installation de bones :
    • gem -V install bones

    • Création de la structure du Gem :
    • bones create <nom_du_gem>

    • Élaboration du Gem :
      • Remplacez tous les FIXME dans les fichiers indiqués.
      • Remplissez la structure avec les données de votre projet.
      • Mettez les libs Ruby à charger pour le lancement du gem dans :
      • <RACINE_DU_PROJET>/lib/<nom_du_gem>
    • Enfin générez le Gem :
    • rake gem
  • Ou vous pouvez utiliser le Gem Jeweler :
    • Installation de Jeweler :
    • gem -V install jeweler
      
      #configuration du compte github
      git config --global github.user <login>
      git config --global github.token <mdp>
      

    • Création de la structure du Gem :
    • jeweler --create-repo --summary "<Description du Gem>" <nom_du_gem>

      • Remplissz le fichier Rakefile généré à la racine :
      • Exemple :
        begin
          require 'jeweler'
          Jeweler::Tasks.new do |s|
            s.name = "<nom_du_gem>"
            s.executables = "jeweler"
            s.summary = "<Description>"
            s.email = "<Email_createur>"
            s.homepage = "http://<Url>"
            s.description = "<Description_detaillee>"
            s.authors = ["<Nom_auteurs>"]
            s.files =  FileList["[A-Z]*", "{bin,generators,lib,test}/**/*", 'lib/jeweler/templates/.gitignore']
            s.add_dependency 'schacon-git'
          end
        rescue LoadError
          puts "Jeweler, or one of its dependencies, is not available. Install it with: [sudo] gem install technicalpickles-jeweler -s http://gems.github.com"
        end
        

      • Remplissez la structure avec les données de votre projet.
      • ajoutez les include de vos librairies Ruby dans :
      • <RACINE_DU_PROJET>/lib/<nom_du_gem>.rb
    • Changement de version :
    • rake version:bump:patch # 1.5.1 -> 1.5.2
      rake version:bump:minor # 1.5.1 -> 1.6.0
      rake version:bump:major # 1.5.1 -> 2.0.0
      
      rake version:write MAJOR=6 MINOR=0 PATCH=3
      
      • Remplacez tous les FIXME dans les fichiers indiqués.
      • Remplissez la structure avec les données de votre projet.
      • Mettez les libs Ruby à charger pour le lancement du gem dans :
      • <RACINE_DU_PROJET>/lib/<nom_du_gem>
    • Enfin générez le Gem :
    • rake version:bump:patch release
    • Pour plus d'infos :
    • http://technicalpickles.com/posts/craft-the-perfect-gem-with-jeweler/

1.4.3) Déployez le Gem (pour une version donnée) :

A la racine du projet (la première fois, l'email et le mot de passe du compte RubyGems seront demandés) :
gem push pkg/<nom_du_gem>-<majeur>.<mineur>.<patch>.gem

1.4.4) Configuration de bones :

Gestion des developpeurs du Gem :
#Liste des développeurs
gem owner <nom_du_gem>

#suppression d'un développeur
gem owner <nom_du_gem> --remove <email@nom_de_domaine.com>

#ajout d'un développeur
gem owner <nom_du_gem> --add <email@nom_de_domaine.com>

Informations sur le Gem :
curl http://rubygems.org/api/v1/gems/<nom_du_gem>.json

Retirer un Gem dont on est développeur de l'index (--undo pour annuler) :
gem yank <nom_du_gem> [--undo] -v <majeur>.<mineur>.<patch>

 

2) Gestion des dépendances :

2.1) Désinstallation

gem uninstall <nom_du_gem> [-v=N.N.N]
Les désinstaller tous :
gem list --no-versions | xargs gem uninstall -a -I

2.2) Recherche des Gems dépendants d'un Gem

gem dependency <gem>
gem dependency --pipe <gem> #liste utilisable par la commande gem
gem dependency --reverse-dependencies <nom_du_gem>

2.3) Recherche de Gem

gem query --remote --name-matches <partie_nom_gem>

2.4) Vérifications

gem check -alien #will report on any rogue (unmanaged) files in the RubyGems repository area.
gem check -verify <nom_gem> #will check that the installed ’’progressbar’’ gem is valid against its own checksum.

2.5) Informations sur un Gem

gem specification <nom_gem>

2.6) Liste des Gems en version HTML

gem server

 

3) Gestion des Plugins :

3.1) Instructions de gestion :

Installation :
script/plugin -v install 
Liste des Plugins disponibles :
script/plugin list
Ajout d'une source externe d'archives de Plugins :
script/plugin source http://<url>
ou source Git :
script/plugin source git://<url>

3.2) Création de Plugin :

cd <projet>
script/generate plugin <nom_plugin> --with-generator

 

4) Gems / Plugins fortement utiles :

4.1) Authentification

4.1.1) Simple

# controllers/application.rb
# 1) retrouve juste l'utilisateur d'après un paramètre d'URL
before_filter :login_from_querystring

def login_from_querystring
	@current_user = User.find_by_name(params[:user])
end


# 2) vérifie un login et un mot de passe en dur
# Filtre sur les actions
before_filter :authenticate, :except => [:index, :show]

def authenticate
	# Si cette méthode renvoie false, l'accès est refusé (message HTTP)
	authenticate_or_request_with_http_basic do |_name, _password|
		_name == '<a_login>' && _password == '<a_password>'
	end
end

Codage :
Digest::SHA1.hexdigest('<mot_de_passe>')

4.1.2) plugin historique

Authlogic Restful Auth
  • plein d'options
  • dry

4.1.3) restful_authentication de technoweenie

C.f.:
http://github.com/technoweenie/restful-authentication

script/plugin -v install http://github.com/technoweenie/restful-authentication.git
Génération :
script/generate authenticated user sessions --include-activation

4.1.4) Devise reposant sur Warden

C'est un Engine Rails, et une surcouche de Warden.
Il est composé de 12 sous-modules :
  • Database Authenticatable :
  • Encrypts and stores a password in the database to validate the authenticity of an user while signing in.
    The authentication can be done both through POST requests or HTTP Basic Authentication.
  • Token Authenticatable :
  • Signs in a user based on an authentication token (also known as "single access token").
    The token can be given both through query string or HTTP Basic Authentication.
  • Omniauthable :
  • Adds Omniauth (github.com/intridea/omniauth) support.
  • Confirmable :
  • Sends emails with confirmation instructions and verifies whether an account is already confirmed during sign in.
  • Recoverable :
  • Resets the user password and sends reset instructions.
  • Registerable :
  • Handles signing up users through a registration process, also allowing them to edit and destroy their account.
  • Rememberable :
  • Manages generating and clearing a token for remembering the user from a saved cookie.
  • Trackable :
  • Tracks sign in count, timestamps and IP address.
  • Timeoutable :
  • Expires sessions that have no activity in a specified period of time.
  • Validatable :
  • Provides validations of email and password.
    It’s optional and can be customized, so you’re able to define your own validations.
  • Lockable :
  • Locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period.
  • Encryptable :
  • Adds support of other authentication mechanisms besides the built-in Bcrypt (the default).
  • Installation :
    • Gem :
    • En root :
      #gem sources -a http://gemcutter.org/
      #Maintenant dans la source standard :
      #Rails 3 => V1.1
      gem install devise
      #Installe la dépendance warden avec
      
      #Rails 2.3 => V1.0.9
      gem install devise --version=1.0.9
      #raccourci JBA
      gemi devise --version=1.0.9
      
      Puis activation dans le projet, par l'utilisateur de dev :
      edition de config/environment.rb :
      #JBA 2010-04-27
      config.gem "warden"
      config.gem "devise"
      
    • ou Plugin
    • #Rails 3 (v1.1)
      script/plugin install git://github.com/plataformatec/devise.git
      
      #Rails 2.3 (v1.0)
      script/plugin install git://github.com/plataformatec/devise.git -r v1.0
      
  • Utilisation :
    • Génération du fichier de config° (config/initializers/devise.rb)
      script/generate devise_install
    • Ajouter des fichier de traduction :
    • Éditer le fichier :
      config/locales/devise.en.yml
    • Éditer config/environments/development.rb pour ajouter :
    • config.action_mailer.default_url_options = { :host => 'localhost:3000' }
    • Génération du Modèle User :
    • script/generate devise <Modèle=User>
    • Génération des vues pour les personnaliser
    • script/generate devise_views

4.1.5) role_requirement

A explorer.

4.2) Gestion de données en arborescence : acts_as_tree

script/plugin -v install acts_as_tree
Ajouter le champ parent_id dans le modèle qui implémente l'arbre.
Fournit les méthodes :
parent, children, ancestors #etc...

4.3) Taggable : acts_as_taggable_on_steroids

C.f.: acts_as_taggable_on_steroids
script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids

4.4) libruby-extras (Debian)

Liste des gems apportés par ce paquet debian :
abstract
actionmailer
actionpack
activerecord
activerecord-jdbc-adapter
activeresource
activesupport
addressable
bcrypt-ruby
data_objects
diff-lcs
dm-aggregates
dm-core
dm-migrations
dm-serializer
dm-sweatshop
dm-timestamps
dm-types
dm-validations
do_sqlite3
erubis
extlib
fastercsv
fastthread
haml
highline
json_pure
mailfactory
merb-assets
merb-auth
merb-auth-core
merb-auth-more
merb-auth-slice-password
merb-cache
merb-core
merb-exceptions
merb-gen
merb-haml
merb-helpers
merb-mailer
merb-param-protection
merb-slices
merb_datamapper
mime-types
ParseTree
rack
railroad
rake
randexp
rspec
ruby-pg
ruby_parser
RubyInline
sexp_processor
stringex
templater
thor
uuidtools
ZenTest

4.5) Génération de listes déroulantes, pour les valeurs de référence dans les vues : View Mapper

La liste déroulante générée contient les valeurs contenues dans la table de référencede la relation affichée.
C.f.:
http://patshaughnessy.net/2010/1/25/creating-associations-to-existing-data-part-1-belongs_to-scaffolding

Installation :
gem sources -a http://gemcutter.org
gem install view_mapper
Usage :
View Mapper will open the specified model ("Shirt"), detect the associated model(s) that Shirt belongs to,
and then generate the form using collection_select along with all of the other standard scaffolding files
script/generate view_for shirt --view belongs_to
script/generate scaffold_for_view shirt color:string size:integer --view belongs_to:person
- assumes the parent model ("Person" in this example) has an attribute or method called "name".
This is used to display the list of people.
- assumes the child model ("Shirt") has a method to display the name of the parent model it belongs to
"person_name" in this example.

4.6) Outils de pagination : will_paginate

4.6.1) Will_paginate

4.6.1.1) Installation :
  • Utilisation du Gem
  • gem install -V will_paginate
    dans config/environment.rb :
    Rails::Initializer.run do |config|
    	...
    end
    
    require 'will_paginate'
    

  • ou utilisation d'un Plugin dans le projet (pour heroku p. ex.)
  • script/plugin install git://github.com/mislav/will_paginate.git

4.6.1.2) Utilisation :
  • dans le Modèle pour configurer le nombres de lignes par page :
  • cattr_reader :per_page
    @@per_page = 10
    Et :
    def pagine(p_page)
    	#paginate s'applique à une relation
    	#donc on peut sortir les conditions (where), include, et order du paginate pour les remplacer par des named scopes
    	return Visite.all.paginate( :page => p_page, :order => 'updated_at DESC', :conditions => ["published = ?", true])
    
    	#Ce qui donne avec Rails 3
    	return Post.includes(:author, :categories).where(:status => 'published').order('blog_posts.created_at DESC').paginate( :page => p_page )
    end
    
    #will_paginate fournit une méthode paginate en interne :
    [].paginate
    
  • Puis utilisation dans le Controlleur pour la génération de l'objet paginé
  • @photos = pagine(params[:page])
  • dans la Vue pour les liens de navigation :
  • <%= will_paginate @photos %>
    
    #Avec la traductions des boutons suiv. et prec. :
    <% will_paginate @visites, :prev_label => I18n.t("pagination.prev"), :next_label => I18n.t("pagination.next") %>
    
4.6.1.3) Ajouter l’Ajax au plugin will_paginate :
dans : /lib/will_paginate/view_helpers.rb
module ViewHelpers
# default options that can be overridden on the global level
@@pagination_options = {
	:class          => 'pagination',
	:previous_label => '« Previous',
	:next_label     => 'Next »',
	:inner_window   => 4, # links around the current page
	:outer_window   => 1, # links around beginning and end
	:separator      => ' ', # single space is friendly to spiders and non-graphic browsers
	:param_name     => :page,
	:params         => nil,
	:renderer       => 'WillPaginate::LinkRenderer',
	:page_links     => true,
	:container      => true,
	# Ligne a ajouter
	:update         => nil # DOM element to update
}
mattr_reader :pagination_options
# suite du code ...
Puis plus bas, on modifie la fonction page_link :
def page_link(page, text, attributes = {})
	if @options[:update].nil?
		@template.link_to text, url_for(page), attributes
	else
		# Ajax update
		@template.link_to_remote text, {:url => url_for(page), :update => @options[:update]}, :html => attributes
	end
end
Et voilà maintenant vous n’avez plus qu’à utiliser dans vos vues :
will_paginate @collections, :update => "mon_id"
Remarques dans la méthode page_link du view_helpers.rb :
- Il faudrait forcer la méthode en GET, sinon il fait un POST par défaut donc on arrive sur le formulaire d’insertion lorsqu’on travaille en RESTful.
- Le dernier paramètre doit être passé avec le symbole html_options ou sans symbole. Mais il ne s’appelle pas options (en tout cas dans Rails 2.2.2).

4.6.2) classic_pagination

Attention : Obsolete
script/plugin install git://github.com/masterkain/classic_pagination.git

4.7) Outil de téléchargement de fichiers : attachment_fu

  • acts_as_attachment, devenu attachment_fu :
  • Installation :
    A besoin de rmagick :

    rmagick a besoin de imagemagick :
    Installer imagemagick :
    apt-get install libmagickcore-dev
    apt-get install libmagickwand-dev
    

    Puis installer rmagick :
    gem install -V rmagick

    Enfin, installer le Plugin lui-même :
    script/plugin install git://github.com/technoweenie/attachment_fu.git

    Utilisation :
    Champs du Modèle :
    script/generate scaffold Image parent_id:integer content_type:string filename:string thumbnail:string size:integer width:integer height:integer
  • file_column, utilise rmagic pour retailler les images :
  • Attention : plus maintenu !
    Installation :
    script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk

Un autre :
  • flex_image

4.8) Calendrier

  • instant_calendar
  • trop simple!
  • calendar_helper
  • trop simple!
  • googlecalendar
  • plus maintenu!
  • has_calendar
  • A_VOIR
  • event_calendar
  • script/plugin install git://github.com/elevation/event_calendar.git
    script/generate event_calendar [EventModel=Event] [ViewName=Calendar] --use-jquery --use-all-day
    	--static-only: Only generate the stylesheet and javascript
    	--use-jquery: Generate jquery javascript
    	--use-all-day: Include an ‘all_day’ field on events, and display appropriately
  • calendar_date_select
  • http://github.com/timcharper/calendar_date_select.git
    http://code.google.com/p/calendardateselect/wiki/ChangingDateFormatCustom
    http://electronicholas.com/calendar

4.9) Module (mod_rails) : passenger de phusion

4.9.1) Pour Apache :

4.9.1.1) Paquet debian :
apt-get install libapache2-mod-passenger
4.9.1.2) Gem :
  • Module passenger
  • gem install -V passenger
    Puis avec le même compte unix (root) :
    passenger-install-apache2-module
    pré-requis :
    Installer les entêtes de développement de Apache2 :
    apt-get install apache2-prefork-dev

  • Éditer /etc/apache2/httpd.conf pour y ajouter :
  • LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
    PassengerRoot /var/lib/gems/1.8/gems/passenger-2.2.15
    PassengerRuby /usr/bin/ruby1.8
    

    Puis redémarrer Apache2

  • Ajout d'une application rails :
  • <VirtualHost *:80>
    	ServerName www.yourhost.com
    	RailsEnv development
    
    	DocumentRoot /somewhere/public    # <-- be sure to point to 'public'!
    	<Directory /somewhere/public>
    		AllowOverride all              # <-- relax Apache security settings
    		Options -MultiViews            # <-- MultiViews must be turned off
    	</Directory>
    </VirtualHost>
    

  • Pour redémarrer l'application :
  • cd <racine_de_l_application>
    touch tmp/restart.txt
  • Tâche Capistrano :
  • namespace :deploy do
    	task :start, :roles => :app do
    	end
    
    	task :stop, :roles => :app do
    	end
    
    	task :restart, :roles => :app do
    		run "touch #{release_path}/tmp/restart.txt"
    	end
    
    	task :after_update_code, :roles => :app do
    		run "rm -rf #{release_path}/public/.htaccess"
    	end
    end
    

4.9.2) Pour Passenger :

  • Installation :

  • Maintient en charge
  • Les instances de rails se mettent en veille quand elles ne sont plus utilisées (PassengerPoolIdleTime).

    Ajout dans le fichier de configuration :
    #Pré chargement
    passenger_pre_start http://bar.com:3500/;
    
    #Nb d'instances minimum
    passenger_min_instances 1;
    			

4.10) Goggle maps

  • Ym4R_GM
  • script/plugin install svn://rubyforge.org/var/svn/ym4r/Plugins/GM/trunk/ym4r_gm
    Les clés Google Maps sont générées à l'adresse suivante :
    http://code.google.com/intl/fr/apis/maps/signup.html
    Éditer le fichier de configuration pour y mettre sa propre clé :
    config/gmaps_api_key.yml
  • GeoRuby
  • gem install GeoRuby
  • SpatialAdapter
  • ruby script/plugin install svn://rubyforge.org/var/svn/georuby/SpatialAdapter/trunk/spatial_adapter

4.11) Popups Ajax

http://www.ericmethot.com/code/ruby/ruby/modaloverlay.html
http://jimneath.org/2008/06/18/using-jquery-with-ruby-on-rails/

4.12) Paypal

http://github.com/solisoft/paypal_nvp/tree/master

4.13) Paperclip

Retaillage en fonction de la taille de l'image :
largeurxhauteur{#,>}
# à la fin indique que l'on veut l'exacte proportion indiquée, la photo sera retaillée automatiquement.
> à la fin mettra le thumbnail à la largeur du plus grand côté spécifié et l'image gardera la proportion de l'image originale.
has_attached_file :img, :styles => {:thumb => [Proc.new { |instance| instance.resize }, :jpg]}


def resize
	@geo_original = Paperclip::Geometry.from_file(img.to_file(:original))

	ratio = @geo_original.width/@geo_original.height  

	if ratio < 0.4 or ratio > 1.375
		# Image very high or very wide
		"110x80#"
	else
		# Average dimensions
		"110x80>"
	end
end
Astuces :
#Estompage :
has_attached_file, ..., :convert_options => { :all => "-blur 0x8" }
#=> option de imagemagick: -blur  {radius}x{sigma}

#Taille dynamique :
has_attached_file	:photo, 
					:styles => { :original => '250x250>', 
						:small => '50x50', 
						:custom => Proc.new { |instance| "#{instance.photo_width}x#{instance.photo_height}>" }
					}

#Supprimer la photo :
@event.photo.nil

Retaillage en batch :
#If Paperclip is installed as a plugin, you can do this:
rake paperclip:refresh:thumbnails CLASS=Screenshot
#where Screenshot is the name of the class with the attachment.

#If it's installed as a gem, do this inside script/console:
Screenshot.all.each { |s| s.image.reprocess! }
#replacing Screenshot with the appropriate class name

 

5) Installation concurrente de versions de Ruby, Ruby Version Manager (RVM) :

Installation :
#Depuis un compte utilisateur
gem install rvm --user-install
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-latest )

#installation de la V1.9.1-p378 par ex. :
rvm install ruby-1.9.1-p378

#ou sans spécifier la version en entier
rvm install ruby-1.8.7

#ou installation de Ruby Enterprise Edition
rvm install ree

#en faire la version par défaut
rvm use ree --default --passenger

Pour mettre à jour RVM :
rvm get latest

#Pour utiliser la dernière version Git de RVM plutôt que la dernière version publiée :
rvm get head

Pour copier des gems d'une version à l'autre :
#Copie de Gems entre versions
rvm gemset copy 1.8.7 1.9.2-head

#Copie de Gemset entre versions
rvm gemset copy 1.8.7@rails3 1.9.2-head@rails3
rvm gemset copy 1.8.7-p330@redmine 1.8.7-p334@redmine

Désinstallation :
#Depuis le compte utilisateur qui a installé la version de Ruby
rvm remove ruby-1.8.7-p330

Pour Unix : Script de lancement à ajouter à un des fichiers de configuration de votre shell:
########################
# Ruby Version Manager #
########################
if [ "`id -u -n`" == "<compte_unix>" ]; then
	[[ -s "$HOME/.rvm/scripts/rvm" ]] && echo "lancement RVM"
	[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
fi

Utilisation :
#Pour Rails 3 par exemple
rvm use 1.9.1

#Version stable (en date de 2010/12)
rvm use 1.8.7

#Le Ruby par défaut
rvm use default
Attention : les Gems sont dépendants du ruby lancé.

Gestion de sous ensembles de Gems :
#Crée le Gemset s'il n'existe pas :
rvm use ruby-1.8.7@album_photo --create

 

6) Surcouches de Ruby On Rails :

6.1) Hobo

gem sources -a http://gems.github.com
gem install -V hobo
Version en cours : hobo-0.8.10