Nach dem Upgrade auf Ruby 1.9.1 und Rails 3.0 unter Mac OS X Snow Leopard hatte ich einigen Ärger mit RubyGem Warnungen. Insbesondere, wenn ich den Server innerhalb des Rails-3-Projektes mit dem folgenden Kommando starten wollte:
rails server |
Zu Beginn, als ich noch mit dem bundler Gem Version 0.9.3 arbeitete, waren es zwei Arten von Fehlern bzw. Warnungen: Die erste Warnung hat das Termial mit hunderten Zeilen Code gefüllt, wie …
WARNING: # NoMethodError: undefined method ` ' for nil:NilClass # -*- encoding: utf-8 -*- ... WARNING: Invalid .gemspec format in \ '.rvm/gems/ruby-1.9.1-p378/specifications/spec.gemspec' |
Das Bundler-Team rund um Carlhuda hat den Fehler mit der Bundler Version 0.9.4 behoben … das Problem sollte nach einem Update des Gems also nicht mehr auftauchen.
Das andere Problem war allerdings etwas hartnäckiger. Beim Start des Servers via
rails server |
oder beim Durchführen eines Tests via
rake |
innerhalb eines Rails-3-Projektes kamen die folgenden Warnungen:
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:14: \ warning: already initialized constant VERSION /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:14: \ warning: already initialized constant RubyGemsVersion /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:194: \ warning: already initialized constant MUTEX /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:196: \ warning: already initialized constant RubyGemsPackageVersion /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:202: \ warning: already initialized constant WIN_PATTERNS /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1079:\ warning: already initialized constant MARSHAL_SPEC_DIR /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1084: \ warning: already initialized constant YAML_SPEC_DIR /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:72: \ warning: already initialized constant VERSION_PATTERN /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:20: \ warning: already initialized constant OPS /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:30: \ warning: already initialized constant OP_RE /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:246: \ warning: already initialized constant Requirement /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:18: \ warning: already initialized constant TYPES /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/platform.rb:171: \ warning: already initialized constant RUBY /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/platform.rb:177: \ warning: already initialized constant CURRENT /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:39: \ warning: already initialized constant NONEXISTENT_SPECIFICATION_VERSION /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:50: \ warning: already initialized constant CURRENT_SPECIFICATION_VERSION /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:56: \ warning: already initialized constant SPECIFICATION_VERSION_HISTORY /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:72: \ warning: already initialized constant MARSHAL_FIELDS /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/specification.rb:75: \ warning: already initialized constant TODAY /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/source_index.rb:593: \ warning: already initialized constant Cache /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:14: \ warning: already initialized constant DEFAULT_BACKTRACE /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:15: \ warning: already initialized constant DEFAULT_BENCHMARK /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:16: \ warning: already initialized constant DEFAULT_BULK_THRESHOLD /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:17: \ warning: already initialized constant DEFAULT_VERBOSITY /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:18: \ warning: already initialized constant DEFAULT_UPDATE_SOURCES /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:24: \ warning: already initialized constant OPERATING_SYSTEM_DEFAULTS /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:30: \ warning: already initialized constant PLATFORM_DEFAULTS /usr/local/lib/ruby/site_ruby/1.9.1/rubygems/config_file.rb:53: \ warning: already initialized constant SYSTEM_WIDE_CONFIG_FILE |
Jeremy Kemper vom Rails-Core-Team hat klar gemacht, dass diese Warnungen kein Rails- sondern ein RubyGem-Bug sind. Ruby 1.9 wird mit einer veralteten RubyGems-Version ausgeliefert … Ruby Version 1.9.1p378 beinhaltet RubyGems 1.3.1. Ich habe natürlich die RubyGems auf Version 1.3.5 aktualisiert mit
sudo gem update --system |
aber diese Aktualisierung führte zu zwei RubyGem-Installationen die die Warnungen verursachen.
So, wie kann man das Problem lösen? Ein Löschen von Ruby 1.9.1 und die Neuinstallation haben leider keinerlei Effekt … die Lösung ist im Grunde recht simpel:
1. Wichtig: Nach der Installation von Ruby 1.9.1 darf auf KEINEN FALL RubyGems 1.3.5 separat manuell installiert werden – das wäre eine Doppelinstalltion. Das sollte man unbedingt beherigen, wenn man die wunderbare Beschreibung von Dan Benjamin, wie man Ruby, RubyGems, und Rails auf Snow Leopard installiert nutzt.
2. Wenn man also Ruby 1.9.1 installiert hat, RubyGems auf 1.3.5 und Bundler auf 0.9.4 upgedated und Rails 3.0 installiert hat, ist das einzige was man tun muss folgendes:
sudo gem uninstall rubygems-update |
Das wars. Keine Fehler mehr!
1. Man kann mit Dan Benjamins Rezept starten und modifiziert die Befehle für download, make und install von ruby-1.9.1-p378.tar.gz. Wichtig ist natürlich, dass man rubygems-1.3.5.tgz NICHT wie angegeben installiert.
2. Dann wird das veraltete RubyGems mit folgendem Kommando aktualisiert:
sudo gem update --system |
3. Jetzt sollten die Gems rake und sqlite3-ruby installiert werden.
4. Schließlich werden noch die weiteren Gems und rails –pre installiert, wie in den Rails 3.0 beta Release Notes beschrieben.
5. Nach der erfolgreichen Installation von Rails 3.0 beta fehlt noch der entscheidende Schritt:
sudo gem uninstall rubygems-update |
6. Am Ende gilt es nur noch zu prüfen, ob einige Gems noch aktualisiert werden können bevor man sich in Rails 3.0 stürzen kann …
sudo gem update |
Hope this helps … und hoffentlich spart es etwas Zeit
Thx Andy für den Hinweis

Die berliner Ruby Usergroup hängt sich auch dieses Jahr wieder schwer für die Community ins Zeug: In der Kalkscheune, nicht weit vom Veranstaltungsort der RailsConfEurope 2008 laden sie alle Ruby-on-Rails-Begeisterten zu einem Networking-Event ein.
Schon im letzten Jahr war das wirklich ein klasse Event – einige Fotos finden sich bei Flickr. Eine gute Developer-Community muss auch Feste feiern können – eins weiß ich gewiss: Ja, wir können!
Also, für alle Ruby-on-Rails-Enthusiasten die am 01.09.2008 – dem Vorabend der RailsConf Europe in Berlin sind: Meldet euch bei Bratwurst-on-Rails an! Wir sehen uns dort!
Schon jetzt: Herzlichen Dank an die Ruby User Group Berlin für die Orga!
Das Zend Framework ist seit dem letzten Artikel zu der Entscheidung Zend oder Rails nach anfänglichem Stocken im Entwicklungsprozess bei Version 1.5 angekommen. Auch Ruby on Rails hat mit dem Sprung auf inzwischen Version 2.0.2 einen großen Sprung gemacht. Wer ist also mein persönlicher Sieger in diesem Rennen? Welches Framework eignet sich aus meiner Sicht am Besten für die Entwicklung von Web-Projekten.
Um es vorweg zu nehmen: Mein persönlicher Favorit ist Ruby on Rails!
Doch die brennende Frage ist natürlich das WARUM:
Bestimmte Projekte eignen sich allerdings nur bedingt für Rails: Mehr …
Drei Jahre ist es her, da veröffentlichte David Heinemeier Hansson die erste Version des Web-Frameworks Ruby on Rails. Der Paradigmenwechsel in der Programmierung von Web-Applikationen hin zu eleganten und pragmatischen Vorgehen ist ein Geschenk für uns alle. Es macht Spaß eine Applikationsidee zu skizzieren, mit Gerüsten und Rapid Application Prototyping sich der richtigen Usability anzunähern. Es macht sogar Spass RoR Code zu lesen. Genug der Lobeshymnen … und ein herzliches Dankeschön an David, der die Revolution gestartet hat … und auch ein herzliches Dankeschön an die gesamte RoR-Community die daraus eine Web-Entwicklungs-Revolution gemacht haben