Ein RubyGem kann nicht nur Bibliotheken, sondern auch (Kommandozeilen-) Programme, Rails-Plugins etc. pp. enthalten. RubyGems erlaubt dem Benutzer die gleichzeitige Installation eines Gems in verschiedenen Versionen.
Ein Gem-Autor kann für sein Gem Abhängigkeiten zu anderen Gems definieren, die von RubyGems bei der Installation automatisch aufgelöst werden.
Ein RubyGem selber zu bauen und veröffentlichen ist gar nicht schwer. In diesem Artikel werde ich zeigen, wie man ein RubyGem von Grund auf selbst baut und sowohl im Quellcode als auch als Paket veröffentlicht.
Im Inneren eines Gems
Ein Gem besteht aus mindestens zwei Teilen
- dem eigentlichen Programmcode und
- einer Gemspec-Datei
Zweckmäßigerweise beinhaltet ein Gem darüber hinaus noch:
- Tests
- Dokumentation
- Automatisierung für die Tests und das Bauen des Pakets
Hier ein Beispiel für die Datei-Struktur eines Gems aus dem RubyGems
Guide:
$ tree freewillfreewill/|-- bin/| `-- freewill|-- lib/| `-- freewill.rb|-- test/| `-- test_freewill.rb|-- README|-- Rakefile`-- freewill.gemspec
Das Gem-Kommando
Die RubyGems-Installation bring das Kommandozeilen-Programm gem
mit. Mit diesem Programm werden Gems verwaltet (installiert, deinstalliert, aufgelistet usw.). Das gem
-Programm dient auch dazu Gems aus dem Quellcode zu bauen:
$ gem build hola.gemspec
Successfully built RubyGem
Name: hola
Version: 0.0.0
File: hola-0.0.0.gem
Mit dem Gem-Kommando build
wird die Gem-Datei erzeugt. Hierfür liest das Gem-Programm die erforderlichen Angaben aus der Gemspec-Datei.
In dem Beispiel finden wir das fertige Gem in der Datei hola-0.0.0.gem
. Mit
gem install hola-0.0.0.gem
kann man das Gem lokal installieren.
RubyGems können auf im Netz veröffentlicht und mit dem Gem-Kommando
von remote installiert werden. Näheres dazu den Abschnitt RubyGems
Dot Org unten.
Die Gemspec-Datei
Gem::Specification.new do |s|s.name = 'hola's.version = '0.0.0's.date = '2010-04-28's.summary = "Hola!"s.description = "A simple hello world gem"s.authors = ["Nick Quaranto"]s.email = 'nick@quaran.to's.files = ["lib/hola.rb"]s.homepage = 'http://rubygems.org/gems/hola'end
Die Gemspec-Datei enthält allgemeine Informationen über das Gem und beschreibt dessen Inhalt. Eine vollständige Liste aller Attribute findet man hier.
Die meisten Attribute sind optional. Erforderlich sind date
, name
, summary
und version
.
files
. Es entscheidet, welche Dateien ins Gem kommen -- und welche nicht. Das ist deshalb wichtig, weil wir sonst Dateien mit ins Gem packen (zum Beispiel Repository-Dateien .git, .svn etc.), die da nicht hineingehören. Wer seinen Gem-Quellcode in git
verwaltet, kann einfach
s.files = `git ls-files`.split($/)
schreiben. Das packt dann alle Dateien ins Gem, die im Repository gehalten werden.
Komplexere Gems basieren möglicherweise auf anderen Gems. Um bei der Installation des Gem automatisch dafür zu sorgen, dass Abhängigkeiten aufgelöst und benötigte Gems gleich mit installiert werden, muss man nur mit z.B.
s.add_dependency('log4r', '>= 1.0.5')
entsprechende Abhängigkeiten definieren.
RubyGems Dot Org
Wir haben ein RubyGem gebaut, die Gemspec-Datei geschrieben und können nun das Gem bauen und lokal installieren. Jetzt möchten wir das Gem veröffentlichen, so dass jeder im Netz es mit
$ gem list -r
finden und mit
$ gem install
installieren kann.
Alles was man dafür braucht ist ein kostenloses Konto auf rubygems.org. Dann kann man dort sein Gem veröffentlichen:
$ gem push <gem-datei>
Don't have an account yet? Create one at http://rubygems.org/sign_up
Email: ...
Password:
Pushing gem to https://rubygems.org...
Successfully registered gem: ...
Danke für diesed Code.
AntwortenLöschendatenraum due diligence
Thanks for sharing as it is an excellent post Webdesign Nürnberg
AntwortenLöschenEhrlich gesagt, ich glaube nicht wirklich an solche Art von Bonusprogrammen, weil es nicht immer gut funktioniert. Normalerweise ziehe ich es vor, Zeit getestete Dienstleistungen zu nutzen, die jeden Tag helfen, zum Beispiel ein paar Tage dank der Wiederherstellungssoftware konnte ich viele wichtige Dateien wiederherstellen, Sehe es hier. Sie können es auch versuchen.
AntwortenLöschen