Ruby on Rails
Gems
Zoeken…
Opmerkingen
Gemfile documentatie
Voor projecten die naar verwachting zullen groeien, is het een goed idee om commentaar toe te voegen aan je Gemfile
. Op die manier weet je zelfs in grote opstellingen wat elke edelsteen doet, zelfs als de naam niet voor zichzelf spreekt en je hem 2 jaar geleden hebt toegevoegd.
Dit kan u ook helpen herinneren waarom u een bepaalde versie hebt gekozen en bijgevolg de versievereiste later opnieuw te evalueren.
Voorbeelden:
# temporary downgrade for TeamCity
gem 'rake', '~> 10.5.0'
# To upload invoicing information to payment provider
gem 'net-sftp'
Wat is een juweeltje?
Een juweel is het equivalent van een plug-in of een extensie voor de programmeertaal robijn.
Om precies te zijn, zelfs rails is niets meer dan een juweeltje. Veel edelstenen zijn gebouwd op rails of andere edelstenen (ze zijn afhankelijk van deze edelsteen) of staan op zichzelf.
In uw Rails-project
Gemfile
Voor uw Rails-project hebt u een bestand met de naam Gemfile
. Hier kunt u edelstenen toevoegen die u in uw project wilt opnemen en gebruiken. Eenmaal toegevoegd moet je de edelsteen installeren met behulp van de bundler
(zie de sectie Bundler).
Gemfile.lock
Zodra je dit hebt gedaan, wordt je Gemfile.lock
bijgewerkt met je nieuw toegevoegde edelstenen en hun afhankelijkheden. Dit bestand vergrendelt je gebruikte edelstenen zodat ze die specifieke versie gebruiken die in dat bestand is aangegeven.
GEM
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)
Dit voorbeeld is voor de edelsteen devise
. In Gemfile.lock
versie 4.0.3
gedeclareerd om aan te geven wanneer u uw project op een andere machine of op uw productieserver installeert welke gespecificeerde versie moet worden gebruikt.
Ontwikkeling
Ofwel een enkele persoon, een groep of een hele gemeenschap werkt aan en onderhoudt een juweeltje. Gedaan werk wordt meestal vrijgegeven nadat bepaalde issues
zijn opgelost of features
zijn toegevoegd.
Meestal volgen de releases het Semantic Versioning 2.0.0- principe.
Bundler
De eenvoudigste manier om edelstenen te hanteren en te beheren is door bundler
. Bundler is een pakketbeheerder vergelijkbaar met prieel.
Om bundler te gebruiken, moet u deze eerst installeren.
gem install bundler
Nadat je de bundler in gebruik hebt, hoef je alleen maar edelstenen aan je Gemfile
toe te Gemfile
en te rennen
bundle
in uw terminal. Hiermee worden uw nieuw toegevoegde edelstenen in uw project geïnstalleerd. Mocht er zich een probleem voordoen, dan krijgt u een melding in uw terminal.
Als u meer informatie wilt, raad ik u aan de documenten te bekijken .
Gemfiles
Om te beginnen hebben gemfiles minimaal één bron nodig, in de vorm van de URL voor een RubyGems-server.
Genereer een Gemfile met de standaardbron rubygems.org door bundle init
. Gebruik https zodat uw verbinding met de server wordt geverifieerd met SSL.
source 'https://rubygems.org'
Verklaar vervolgens de edelstenen die u nodig hebt, inclusief versienummers.
gem 'rails', '4.2.6'
gem 'rack', '>=1.1'
gem 'puma', '~>3.0'
De meeste versiespecificaties, zoals> = 1.0, zijn zelfverklarend. De aanduiding ~> heeft een speciale betekenis. ~> 2.0.3 is identiek aan> = 2.0.3 en <2.1. ~> 2.1 is identiek aan> = 2.1 en <3.0. ~> 2.2.beta komt overeen met pre-releaseversies zoals 2.2.beta.12.
Git-opslagplaatsen zijn ook geldige edelsteenbronnen, zolang de repo een of meer geldige edelstenen bevat. Geef op wat u wilt uitchecken met :tag
:branch
of :ref
. De standaardinstelling is de master
tak.
gem 'nokogiri', :git => 'https://github.com/sparklemotion/nokogiri', :branch => 'master'
Als u een uitgepakte edelsteen rechtstreeks uit het bestandssysteem wilt gebruiken, stelt u eenvoudig de optie: pad in op het pad met de bestanden van de edelsteen.
gem 'extracted_library', :path => './vendor/extracted_library'
Afhankelijkheden kunnen in groepen worden geplaatst. Groepen kunnen worden genegeerd op install-tijd (met behulp van --without
) of vereist is in een keer (met behulp van Bundler.require
).
gem 'rails_12factor', group: :production
group :development, :test do
gem 'byebug'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'dotenv-rails'
end
U kunt de vereiste versie van Ruby in de Gemfile opgeven met ruby
. Als de Gemfile op een andere Ruby-versie is geladen, zal Bundler een uitzondering met een toelichting maken.
ruby '2.3.1'
Gemsets
Als u RVM(Ruby Version Manager)
is het gebruik van een gemset
voor elk project een goed idee. Een gemset
is gewoon een container die je kunt gebruiken om edelstenen van elkaar te houden. Door een gemset
per project te maken, kunt u edelstenen (en edelsteenversies) voor één project wijzigen zonder al uw andere projecten te breken. Elk project hoeft zich alleen zorgen te maken over zijn eigen edelstenen.
RVM
biedt (> = 0.1.8) een @global gemset
per ruby tolk. Edelstenen die u installeert op de @global gemset
voor een bepaalde ruby, zijn beschikbaar voor alle andere edelsteensets die u in combinatie met die ruby maakt. Dit is een goede manier om al uw projecten dezelfde geïnstalleerde parel te laten delen voor een specifieke robijnrode tolkinstallatie.
Gemsets maken
Stel dat u al ruby-2.3.1
geïnstalleerd en dat u deze hebt geselecteerd met deze opdracht:
rvm use ruby-2.3.1
Nu om gemset voor deze robijnversie te maken:
rvm gemset create new_gemset
waarbij de new_gemset
de naam van gemset is. Om de lijst met beschikbare edelsteensets voor een robijnrode versie te bekijken:
rvm gemset list
om de edelstenen van alle robijnrode versies te vermelden:
rvm gemset list_all
om een gemset uit de lijst te gebruiken (stel dat new_gemset
de gemset is die ik wil gebruiken):
rvm gemset use new_gemset
u kunt ook de robijnversie met de gemset opgeven als u naar een andere robijnversie wilt overschakelen:
rvm use ruby-2.1.1@new_gemset
om een standaard gemset voor een bepaalde robijnversie op te geven:
rvm use 2.1.1@new_gemset --default
om alle geïnstalleerde edelstenen uit een gemset te verwijderen, kun je deze leegmaken door:
rvm gemset empty new_gemset
om een gemset van de ene robijn naar de andere te kopiëren, kun je het doen door:
rvm gemset copy 2.1.1@rails4 2.1.2@rails4
een gemset verwijderen:
rvm gemset delete new_gemset
om de huidige gemset-naam te zien:
rvm gemset name
om een edelsteen in de wereldwijde edelsteen te installeren:
rvm @global do gem install ...
Gemsets initialiseren tijdens Ruby-installaties
Wanneer u een nieuwe robijn installeert, maakt RVM niet alleen twee edelsteensets (de standaard, lege edelsteen en de globale edelsteen), maar gebruikt het ook een aantal door de gebruiker bewerkbare bestanden om te bepalen welke edelstenen u moet installeren.
Werken in ~/.rvm/gemsets
, zoekt rvm naar global.gems
en default.gems
met behulp van een boomhiërachie op basis van de ruby-reeks die wordt geïnstalleerd. Aan de hand van het voorbeeld van ree-1.8.7-p2010.02
zal rvm de volgende bestanden controleren (en importeren uit):
~/.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
Als u bijvoorbeeld ~/.rvm/gemsets/global.gems
hebt bewerkt door deze twee regels toe te voegen:
bundler
awesome_print
elke keer dat u een nieuwe robijn installeert, worden deze twee edelstenen in uw wereldwijde gemset geïnstalleerd. default.gems
en global.gems
bestanden worden meestal overschreven tijdens de update van rvm.