1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
---
category: tool
tool: ruby ecosystem
contributors:
- ["Jon Smock", "http://github.com/jonsmock"]
- ["Rafal Chmiel", "http://github.com/rafalchmiel"]
translators:
- ["Christian Albrecht", "https://github.com/coastalchief"]
filename: ruby-ecosystem-de.html.markdown
lang: de-de
---
Hier gibt es einen Überblick über die gängigsten Tools zur Verwaltung
von verschiedenen Ruby Versionen, Gems und Dependencies.
## Ruby Managers
Einige Betriebssysteme haben bereits eine Ruby Version vorinstalliert
oder bieten sie als Package zum Download an. Die meisten Rubyisten
benutzen diese aber eher nicht und wenn, dann um damit einen Ruby
Manager zu installieren. Damit kann man komfortabel zwischen den
verschiedenen Versionen hin und herspringen.
Dies sind die beliebtesten:
* [RVM](https://rvm.io/) - Installiert und wechselt zwischen rubies
RVM kennt verschiedene Ruby Versionen und hat das Konzept der gemsets,
um gem Abhängigkeiten pro Projekt zu managen.
* [ruby-build](https://github.com/sstephenson/ruby-build)
Installiert nur rubies, kann diese aber sehr gut verwalten
* [rbenv](https://github.com/sstephenson/rbenv) - Wechselt Ruby Versionen.
Wird zusammen mit ruby-build benutzt. Hiermit kann man kontrollieren,
wie rubies laden.
* [chruby](https://github.com/postmodern/chruby) - Wechselt Ruby Versionen.
Ähnlich rbenv.
## Ruby Versionen
Ruby wurde von Yukihiro "Matz" Matsumoto vor gut 20 Jahren veröffentlicht.
Matz ist nach wie vor in die Entwicklung involviert. Daher kommt auch der
Name der Referenzimplementierung: MRI (Matz' Reference Implementation).
Die aktuellste Version ist **2.2.3** und wurde im August 2015 veröffentlicht!
Hier eine kurze Versionshistorie:
* 2.0.0 - Release im Februar 2013 -- Release zum 20. Geburtstag der Sprache
[Rubies are forever](http://www.heise.de/developer/artikel/Ruby-2-0-als-Geschenk-zum-20-Geburtstag-1808109.html)
* 1.9.3 - Release im Oktober 2011
[End of Life](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
* 1.8.7 - Release im Juni 2006
[End of Life](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).
Die Veränderung zwischen 1.8.7 und 1.9.x war sehr groß und eine Migration
nicht so einfach möglich. Der Versionssprung auf 2.0.0 war verglichen dazu
weit weniger dramatisch.
Beispielsweise hat 1.9. Encodings und eine Bytecode VM eingeführt.
Es gibt immer noch Projekte die auf der stabilen Version 1.8.7 laufen,
aber diese sind mittlerweile in der Minderheit. Die meisten Projekte
laufen auf 1.9.x oder auf 2.x.
## Ruby Implementierungen
Das Ruby Ecosystem beinhaltet viele verschiedene Implementierungen von Ruby,
jedes mit seinen eigenen Vorteilen und verschiedenen Graden von
Kompatibilität. Auch wenn alle diese Implementierungen in verschiedenen
Sprachen geschrieben sind, sind sie doch **alle Ruby**.
Jede Implementierung bietet neben ihren speziellen Features immer auch
die Möglichkeit normale ruby Dateien auszuführen.
Am ausgereiftesten und stabilsten:
* [MRI](https://github.com/ruby/ruby) - Geschrieben in C, das ist die Referenz Implementierung.
Sie ist 100% kompatibel (mit sich selbst ;-). Alle anderen rubies
bleiben kompatibel mit MRI (siehe [RubySpec](#rubyspec) weiter unten).
* [JRuby](http://jruby.org/) - Geschrieben in Java and Ruby, Robust und ziemlich schnell.
Der größte Vorteil von JRuby ist die Interoperabilität mit JVM/Java und damit die
Benutzung von Ruby im Java Ecosystem.
* [Rubinius](http://rubini.us/) - Geschrieben in Ruby mit C++ bytecode VM.
Auch sehr ausgereift und schnell.
Mittel ausgereift / kompatibel:
* [Maglev](http://maglev.github.io/) - Baut auf Gemstone, ein Smalltalk VM.
Dieses Projekt versucht das großartige Smalltalk Tooling in die Ruby Welt
zu bringen.
* [RubyMotion](http://www.rubymotion.com/) - Ruby in der iOS Entwicklung.
Weniger ausgereift/kompatibel:
* [Topaz](http://topazruby.com/) - Geschrieben in RPython (via PyPy)
Topaz ist noch ziemlich jung und versucht die schnellste Implementierung
zu werden.
* [IronRuby](http://ironruby.net/) - Geschrieben in C# für die .NET Plaftform
Das letzte Release von IronRuby ist mittlerweile 5 Jahre her.
Die Ruby Implementierungen haben ihre eigenen Versionsnummern, sind aber
trotzdem immer zu einer MRI Version kompatibel.
Viele können sogar zwischen verschiedenen Modi wechseln (1.8 mode -> 1.9 mode)
## RubySpec
Die meisten Ruby Implementierungen vertrauen der [RubySpec](http://rubyspec.org/).
sehr stark. Da Ruby keine offizielle Spezifikation hat, hat die
Community ausführbare Specs (in Ruby) geschrieben, um so die Kompatibilität
zur MRI testen zu können.
## RubyGems
[RubyGems](http://rubygems.org/) ist der Community Paket Manager von Ruby.
RubyGems kommt mit Ruby zusammen, so dass kein extra Tool nötig ist.
Ruby Pakete werden "gems" genannt und könnten auf RubyGems.org
veröffentlicht werden. Jedes Gem enthält den Source Code und Meta Daten,
wie die Versionsnummer, weitere Abhängigkeiten, Autoren und Lizenzen.
## Bundler
[Bundler](http://bundler.io/) ist ein Tool um Abhängigkeiten zwischen
Gems aufzulösen und zu managen. Dazu werden diese in einem gemfile
zusammengefasst und Bundler kümmert sich darum die Abhängigkeiten
untereinander rekursiv aufzulösen. Entweder es klappt und alle gems
konnten runtergeladen werden, oder es wird abgebrochen und
der Konflikt gemeldet.
Zum Beispiel:
Wenn Gem A die Version 3 oder höher von Gem Z braucht, aber Gem B
von Gem Z die Version 2, dann ist das ein Konflikt.
# Testing
Test-Driven Development ist ein essentieller Teil der Ruby Kultur.
Ruby bringt sein eigenes Unit-Test framework mit, minitest. Darüberhinaus
gibt es noch viele weitere Testframeworks mit unterschiedlichsten Zielen:
* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Eingebaut in Ruby 1.8
"Unit-style" Testframework
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Eingebaut in Ruby 1.9/2.0
"Unit-style" Testframework
* [RSpec](http://rspec.info/) - Ein Testframework welches auf verständliche Testdefinition setzt
* [Cucumber](http://cukes.info/) - Ein BDD Testframework welches Gherkin tests parsen kann
## Be Nice
Die Ruby Community ist stolz darauf eine offene, vielfältige und einladende
Community zu sein. Es gibt viele aktive Ruby User Gruppen und diverse
Ruby Konferenzen. Matz selbst ist so oft es geht dabei.
* [Euruko](http://www.euruko2015.org)
* [User Groups](https://www.ruby-lang.org/de/community/user-groups/)
|