Gemfile
Pour votre projet Rails, vous avez un fichier appelé Gemfile . Ici, vous pouvez ajouter des gemmes que vous souhaitez inclure et utiliser dans votre projet. Une fois ajouté, vous devez installer la gem en utilisant bundler (voir la section bundler ).
Gemfile.lock
Une fois que vous avez fait cela, votre Gemfile.lock sera mis à jour avec vos gems nouvellement ajoutés et leurs dépendances. Ce fichier verrouille vos gems utilisés afin qu'ils utilisent cette version spécifique déclarée dans ce fichier.
remote: https://rubygems.org/ specs: devise (4.0.3) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0, < 5.1) responders warden (~> 1.2.3)
Cet exemple est pour le bijou devise . Dans le Gemfile.lock la version 4.0.3 est déclarée pour indiquer lors de l’installation de votre projet sur une autre machine ou sur votre serveur de production la version spécifiée à utiliser.
Développement
Une seule personne, un groupe ou une communauté entière travaille et entretient une gemme. Le travail effectué est généralement libéré après certains issues ont été corrigés ou features ont été ajoutées.
Généralement, les versions suivent le principe Semantic Versioning 2.0.0 .
Bundler
Le moyen le plus simple de gérer et de gérer les gemmes consiste à utiliser un bundler . Bundler est un gestionnaire de paquets comparable à Bower.
Pour utiliser un bundler, vous devez d'abord l'installer. gem install bundler
Une fois que vous avez un bundler, tout ce que vous avez à faire est d'ajouter des gemmes à votre Gemfile et de l'exécuter.
bundle
dans votre terminal. Cela installe vos gems nouvellement ajoutés à votre projet. En cas de problème, vous recevrez une invite dans votre terminal.
Si vous êtes intéressé par plus de détails, je vous suggère de regarder les documents .
Gemfiles
Pour commencer, les gemfiles nécessitent au moins une source, sous la forme de l'URL d'un serveur RubyGems.
Générez un Gemfile avec la source rubygems.org par défaut en exécutant bundle init . Utilisez https pour que votre connexion au serveur soit vérifiée avec SSL.
source 'https://rubygems.org'
Ensuite, déclarez les gemmes dont vous avez besoin, y compris les numéros de version. gem 'rails', '4.2.6'
gem 'rack', '>=1.1' gem 'puma', '~>3.0'
La plupart des spécificateurs de version, tels que> = 1.0, sont explicites. Le spécificateur ~> a une signification particulière. ~> 2.0.3 est identique à> = 2.0.3 et <2.1. ~> 2.1 est identique à> = 2.1 et <3.0. ~> 2.2.beta correspondra aux versions préliminaires comme 2.2.beta.12.
Les référentiels Git sont également des sources de gem, à condition que le référentiel en contienne un ou plusieurs. Spécifiez ce que vous voulez extraire avec :tag :branch ou :ref . La valeur par défaut est le master branche.
gem 'nokogiri', :git => 'https://github.com/sparklemotion/nokogiri', :branch => 'master'
Si vous souhaitez utiliser une gem sans décompression directement depuis le système de fichiers, définissez simplement l'option: path sur le chemin contenant les fichiers de la gem.
gem 'extracted_library', :path => './vendor/extracted_library'
Les dépendances peuvent être regroupées. Les groupes peuvent être ignorés lors de l'installation (en utilisant --without ) ou requis en même temps (en utilisant Bundler.require ).
gem 'rails_12factor', group: :production
group :development, :test do gem 'byebug'
gem 'web-console', '~> 2.0' gem 'spring'
gem 'dotenv-rails' end
Vous pouvez spécifier la version requise de Ruby dans le Gemfile avec ruby . Si le Gemfile est chargé sur une autre version de Ruby, Bundler générera une exception avec une explication.
ruby '2.3.1'
Gemsets
Si vous utilisez RVM(Ruby Version Manager) utiliser un gemset pour chaque projet est une bonne idée. Un gemset est juste un conteneur que vous pouvez utiliser pour séparer les gemmes les unes des autres. Créer un gemset par projet vous permet de modifier des gemmes (et des versions de gemme) pour un projet sans casser tous vos autres projets. Chaque projet n'a besoin que de s'inquiéter de ses propres joyaux.
le @global gemset pour un rubis donné sont disponibles pour tous les autres gemsets que vous créez en association avec ce ruby. C'est un bon moyen de permettre à tous vos projets de partager le même bijou installé pour une installation spécifique d'interpréteur Ruby.
Créer des gemsets
Supposons que vous avez déjà installé ruby-2.3.1 et que vous l'avez sélectionné en utilisant cette commande:
rvm use ruby-2.3.1
Maintenant, pour créer gemset pour cette version ruby: rvm gemset create new_gemset
où le new_gemset est le nom de gemset. Pour voir la liste des gemsets disponibles pour une version ruby:
rvm gemset list
lister les gemmes de toutes les versions rubis: rvm gemset list_all
utiliser un gemset de la liste (supposons que new_gemset soit le gemset que je veux utiliser): rvm gemset use new_gemset
vous pouvez également spécifier la version ruby avec le gemset si vous souhaitez passer à une autre version de ruby:
rvm use ruby-2.1.1@new_gemset
spécifier un gemset par défaut pour une version ruby particulière: rvm use 2.1.1@new_gemset --default
pour supprimer toutes les gemmes installées d'un gemset, vous pouvez le vider par: rvm gemset empty new_gemset
pour copier un gemset d'un rubis à un autre, vous pouvez le faire en: rvm gemset copy 2.1.1@rails4 2.1.2@rails4
supprimer un gemset:
rvm gemset delete new_gemset
pour voir le nom actuel du gemset: rvm gemset name
installer un bijou dans le gemset global: rvm @global do gem install ...
Initialisation des gemsets pendant les installations Ruby
Lorsque vous installez un nouveau ruby, RVM ne crée pas seulement deux gemsets (le gemset vide et le gemset global par défaut), il utilise également un ensemble de fichiers modifiables par l'utilisateur pour déterminer les gems à installer.
En travaillant dans ~/.rvm/gemsets , rvm recherche global.gems et default.gems utilisant une hiérarchie arborescente basée sur la chaîne ruby installée. En utilisant l'exemple de ree-1.8.7-p2010.02 , rvm va vérifier (et importer depuis) les fichiers suivants:
~/.rvm/gemsets/ree/1.8.7/p2010.02/global.gems ~/.rvm/gemsets/ree/1.8.7/p2010.02/default.gems ~/.rvm/gemsets/ree/1.8.7/global.gems ~/.rvm/gemsets/ree/1.8.7/default.gems ~/.rvm/gemsets/ree/global.gems ~/.rvm/gemsets/ree/default.gems ~/.rvm/gemsets/global.gems ~/.rvm/gemsets/default.gems
Par exemple, si vous avez modifié ~/.rvm/gemsets/global.gems en ajoutant ces deux lignes: bundler
awesome_print
Chaque fois que vous installez un nouveau ruby, ces deux gems sont installés dans votre gemset global. global.gems fichiers default.gems et global.gems sont généralement écrasés lors de la mise à jour de rvm.
Chapitre 32: Héritage de table unique
Introduction
L'héritage de table unique (STI) est un modèle de conception basé sur l'idée de sauvegarder les données de plusieurs modèles qui héritent tous du même modèle de base, dans une seule table de la base de données.
Examples
Exemple de base
Nous avons d'abord besoin d'un tableau pour contenir nos données class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t| t.string :name
t.string :password
t.string :type # <- This makes it an STI
t.timestamps end
end end
Puis laisse créer des modèles class User < ActiveRecord::Base validates_presence_of :password
# This is a parent class. All shared logic goes here end
class Admin < User
# Admins must have more secure passwords than regular users # We can add it here
validates :custom_password_validation end
class Guest < User
# Lets say that we have a guest type login. # It has a static password that cannot be changed
validates_inclusion_of :password, in: ['guest_password'] end
Lorsque vous faites un Guest.create(name: 'Bob') ActiveRecord le traduira pour créer une entrée dans la table Users avec le type: 'Guest' .
Lorsque vous récupérez l'enregistrement bob = User.where(name: 'Bob').first l'objet renvoyé sera d'abord une instance de l' Guest , qui peut être traité de manière forcée en tant bob.becomes(User) avec bob.becomes(User)
devient très utile lorsque vous traitez des partials partagés ou des routes / contrôleurs de la superclasse au lieu de la sous-classe.