/var/lib/gemsAlors que Ruby est installé dans :
/usr/lib/ruby
# Rubygem export PATH=$PATH:/var/lib/gems/1.8/bin
gem [install|ins] -V <nom_gem>
gem ins -r progressbar --version '> 0.0.1'
gem ins -r progressbar-0.0.3
gem install --local pkg/rails-cache-1.0.0.gem
-run-tests
--no-ri --no-rdocOpérateur de sélection de version :
Specification | From | ... | To (exclusive) |
---|---|---|---|
>= 3.0 | 3.0 | ∞ | |
~> 3.0 | 3.0 | 4.0 | |
~> 3.0.0 | 3.0.0 | 3.1 | |
~> 3.5 | 3.5 | 4.0 | |
~> 3.5.0 | 3.5.0 | 3.6 |
gem outdatedMise-À-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 --systemSupprimer les versions de gems installés qui sont obsolètes, en laissant la nouvelle version mise-à-jour installée :
gem cleanObtenir un graphe des gems installés :
#A executer avec un compte root gem install graph gem graphPour activer un gem dans un projet, une seule instruction suffit :
<TODO : l'instruction>
ruby -rrubygemsou.rb
ruby -rubygemsou.rb
export RUBYOPT=rubygemsPour ne pas avoir à indiquer dans tous les fichiers :
require 'rubygems'dans Rails :
#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"
http://rubygems.org/sign_upPuis confirmer l'inscription, avec l'URL reçue dans l'email d'enregistrement.
gem build <nom_du_gem>.gemspec
gem -V install bones
bones create <nom_du_gem>
<RACINE_DU_PROJET>/lib/<nom_du_gem>
rake gem
gem -V install jeweler #configuration du compte github git config --global github.user <login> git config --global github.token <mdp>
jeweler --create-repo --summary "<Description du Gem>" <nom_du_gem>
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
<RACINE_DU_PROJET>/lib/<nom_du_gem>.rb
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
<RACINE_DU_PROJET>/lib/<nom_du_gem>
rake version:bump:patch release
http://technicalpickles.com/posts/craft-the-perfect-gem-with-jeweler/
gem push pkg/<nom_du_gem>-<majeur>.<mineur>.<patch>.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>
curl http://rubygems.org/api/v1/gems/<nom_du_gem>.json
gem yank <nom_du_gem> [--undo] -v <majeur>.<mineur>.<patch>
gem uninstall <nom_du_gem> [-v=N.N.N]Les désinstaller tous :
gem list --no-versions | xargs gem uninstall -a -I
gem dependency <gem> gem dependency --pipe <gem> #liste utilisable par la commande gem gem dependency --reverse-dependencies <nom_du_gem>
gem query --remote --name-matches <partie_nom_gem>
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.
gem specification <nom_gem>
gem server
script/plugin -v installListe des Plugins disponibles :
script/plugin listAjout d'une source externe d'archives de Plugins :
script/plugin source http://<url>ou source Git :
script/plugin source git://<url>
cd <projet> script/generate plugin <nom_plugin> --with-generator
# 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
Digest::SHA1.hexdigest('<mot_de_passe>')
http://github.com/technoweenie/restful-authentication
script/plugin -v install http://github.com/technoweenie/restful-authentication.gitGénération :
script/generate authenticated user sessions --include-activation
#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.9Puis activation dans le projet, par l'utilisateur de dev :
#JBA 2010-04-27 config.gem "warden" config.gem "devise"
#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
script/generate devise_install
config/locales/devise.en.yml
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
script/generate devise <Modèle=User>
script/generate devise_views
script/plugin -v install acts_as_treeAjouter le champ parent_id dans le modèle qui implémente l'arbre.
parent, children, ancestors #etc...
script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids
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
http://patshaughnessy.net/2010/1/25/creating-associations-to-existing-data-part-1-belongs_to-scaffolding
gem sources -a http://gemcutter.org gem install view_mapperUsage :
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".
gem install -V will_paginatedans config/environment.rb :
Rails::Initializer.run do |config| ... end require 'will_paginate'
script/plugin install git://github.com/mislav/will_paginate.git
cattr_reader :per_page @@per_page = 10Et :
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
@photos = pagine(params[:page])
<%= 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") %>
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 endEt 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 :
script/plugin install git://github.com/masterkain/classic_pagination.git
apt-get install libmagickcore-dev apt-get install libmagickwand-dev
gem install -V rmagick
script/plugin install git://github.com/technoweenie/attachment_fu.git
script/generate scaffold Image parent_id:integer content_type:string filename:string thumbnail:string size:integer width:integer height:integer
script/plugin install http://opensvn.csie.org/rails_file_column/plugins/file_column/trunk
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
http://github.com/timcharper/calendar_date_select.git http://code.google.com/p/calendardateselect/wiki/ChangingDateFormatCustom http://electronicholas.com/calendar
apt-get install libapache2-mod-passenger
gem install -V passengerPuis avec le même compte unix (root) :
passenger-install-apache2-modulepré-requis :
apt-get install apache2-prefork-dev
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
<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>
cd <racine_de_l_application> touch tmp/restart.txt
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
#Pré chargement passenger_pre_start http://bar.com:3500/; #Nb d'instances minimum passenger_min_instances 1;
script/plugin install svn://rubyforge.org/var/svn/ym4r/Plugins/GM/trunk/ym4r_gmLes 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
gem install GeoRuby
ruby script/plugin install svn://rubyforge.org/var/svn/georuby/SpatialAdapter/trunk/spatial_adapter
http://www.ericmethot.com/code/ruby/ruby/modaloverlay.html
http://jimneath.org/2008/06/18/using-jquery-with-ruby-on-rails/
http://github.com/solisoft/paypal_nvp/tree/master
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 endAstuces :
#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
#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
#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
rvm get latest #Pour utiliser la dernière version Git de RVM plutôt que la dernière version publiée : rvm get head
#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
#Depuis le compte utilisateur qui a installé la version de Ruby rvm remove ruby-1.8.7-p330
######################## # 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
#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 defaultAttention : les Gems sont dépendants du ruby lancé.
#Crée le Gemset s'il n'existe pas : rvm use ruby-1.8.7@album_photo --create
gem sources -a http://gems.github.com gem install -V hoboVersion en cours : hobo-0.8.10