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
Pratik Naik vom Rails-Core-Team hat gerade ein neues Ruby on Rails hackfest vorgestellt: Monatsgewinner wird derjenige, der die meisten Patche veröffentlicht, die auch in Rails core aufgenommen werden.
Im August bekommt der Gewinner – dank O’Reilly – als Preis freien Eintritt auf die RailsConf Europe. Keep on coding!
Vom 2. bis 4. September 2008 findet zum dritten Mal die RailsConf Europe in Berlin statt. Schon letztes Jahr eine Konferenz zum Wohlfühlen – und ein Ort an dem viele der Köpfe hinter Ruby on Rails in der Kaffee-Pause plötzlich neben dir stehen und man die Developer-Community hautnah erlebt. Bei aller Virtualität ist Face-to-Face-Kommunikation die Seele der Community.
Jedem Rails Developer, der es sich einrichten kann, kann ich das Event nur ans Herz legen. Und alle die elegant Webapplikationen entwickeln wollen, aber noch nicht mit Ruby on Rails arbeiten, kann man die Konferenz erst recht nur empfehlen.
Eine Gruppe, die ich bisher an Ruby on Rails Konferenzen besonders vermisse sind die Designer. Denn gutes Applikations- und Interaktionsdesign, gute Usability von Webapplikationen lassen sich nur erreichen, wenn Developer und Designer zusammenarbeiten – und dafür müssen Developer etwas von Design und Designer etwas von Developern verstehen. Deshalb freut es mich ganz besonders, dass mein Proposal genau zu diesem Thema angenommen worden ist. In meiner Dopplerolle als Developer und Designer geht es in meinem Vortrag auf der RailsConf Europe um:
DESIGN ON RAILS FOR USABILITY
… Or why designers should start to understand code and developers should start to sketch and use design methods.
Ich freue mich riesig auf die Konferenz – und darauf mal wieder ein paar codedifferent-Blogleser real zu treffen! Und nicht vergessen: Vor der Konferenz noch eine Bratwurst-on-Rails!
Nach den Erfolgen der RailsConf 2007 mit 1.600 und der RailsConf Europe 2007 mit 800 Teilnehmern wird 2008 das Jahr der Rails 2.0-Konferenzen.
04./05. April 2008: ScotlandOnRails, Edinburgh, Schottland
http://scotlandonrails.com
Konferenzsprache Englisch
29. Mai – 01. Juni 2008: RailsConf 2008, Portland, Oregon, USA
http://en.oreilly.com/rails2008/
Organisiert von O’Reilly – Konferenzsprache Englisch
09./10. Juni 2008: Rails-Konferenz.de, Frankfurt, Deutschland
http://www.rails-konferenz.de
Konferenzsprache Deutsch
10. Juni 2008: Ruby en Rails 2008, Amsterdam, Niederlande
http://2008.rubyenrails.nl
Konferenzsprache Niederländisch
02.-04. September 2008: RailsConf Europe, Berlin, Deutschland
http://en.oreilly.com/railseurope2008/
Organisiert von O’Reilly – Konferenzsprache Englisch
Sicher gibt es noch mehr Konferenzen zum Thema Rails … ein Kommentar genügt
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 …