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:

Ist Ruby 1.9.1 und Rails 3.0 beta schon installiert …

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!

Falls Ruby 1.9.1 und Rails 3.0 noch nicht installiert ist …

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 ;-)

Seit heute ist die Registierung zur – wohl wieder größten – Ruby-on-Rails-Konferenz in den USA möglich: RailsConf 2009. Wie in den vorigen Jahren organisiert O’Reilly wieder das Event. Dieses Mal findet die Konferenz allerdings nicht in Portland sondern in Las Vegas statt – nicht nur das Glücksspiel- und Vergnügungszentrum der USA sondern auch ein begehrter Konferenzstandort ;-)
Für die Schnellentschlossenen bis zum 16. März winkt ein Early-Bird-Bonus mit dem sich 200 USD sparen lassen.
Für alle die auf der Konferenz einen Vortrag halten wollen, wurde das Abgabedatum für einen Call for Participation bis zum 17. Februar 2009 verlängert. Da heißt es also schnell sein!
Die Konferenz selbst findet dann vom 4. bis 7. Mai 2009 im Las Vegas Hilton statt.

Viva Las Vegas!

Quellen: rubyonrails.com, RailsConf.com

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:

  • 1. Ruby statt PHP: Natürlich klingt es unlogisch die eigenen mühsam erarbeiten PHP-Kenntnisse links liegen zu lassen und sich in eine junge rein objektorientierte Sprache einzuarbeiten. Doch, und das bestätigte mir bisher jeder ehemalige Java- oder PHP-Entwickler – die Mühe ist nicht groß Ruby zu lernen und der Nutzen ist überwältigend. Ruby ermöglicht es eleganten, gut lesbaren und gut wartbaren Code zu schreiben.
  • 2. Vision-Driven-Community: Egal ob in den Mailing-Listen oder auf Entwickerkonferenzen, die Grundeinstellung und Vision der Community ist freundlich, ansteckend, international und produktiv. Es geht darum gemeinsam etwas neues, besseres und eleganteres zu schaffen … siehe auch die Keynote der RailsConf 2007 von David Heinemeier Hansson in Portland.
  • 3. Skalierbarkeit: Inzwischen wurde vielfach bewiesen, dass Rails-Applikationen sich gut skalieren lassen auch wenn die Performance etwas schlechter sein soll. Doch unter dem Strich braucht man so etwas mehr Hardware als bei einem Zend Framework Projekt, doch dafür gewinnt man eine schnellere Entwicklung und bessere Wartbarkeit. Twitter, Qype und Xing machen es vor. Insbesondere die Twitter-Entwickler plaudern gerne über die Skalierbarkeit, wie Britt Selvitelle auf der RailsConf Europe 2007 in Berlin.
  • 4. REST: Mit der Version 2.0 wurde die Programmierung nach dem REST-Prinzip konsequent im Ruby on Rails Framework implementiert. Damit lassen sich einfach Schnittstellen zu anderen Systemen schaffen – und werden alte, aber gute und durchdachte Features des http-Protokolls wiederentdeckt. Siehe auch das PDF von b-simple zum Thema RESTful-Rails.
  • 5. Datenbank-Migrationen: Rails bietet mit Migrations ein mächtiges System Datenbankstrukturen einfach und in Einzelschritten skriptbasiert zu erstellen – und, wenn nötig diese Einzelschritte auch wieder rückgängig zu machen. Für die Entwicklung nach dem Prinzip des “Pragmatic Programming” ist das ein perfektes Werkzeug um Tabellen zu erstellen, zu erweitern und mit Daten zu füllen. Für das Zend Framework ist ein solches Feature als Proposal angedacht … doch wann es kommt und wie es funktionieren wird ist noch völlig unklar.
  • 6. Test-Driven-Development: Rails ist weiterhin Vorreiter was die eingebauten Test-Infrastruktur für automatisierte Unit-Tests, Functional-Tests und Integration-Test. Zend Framework versucht zwar mit dem ZFTestManager aufzuholen – doch noch immer fehlt eine schlüssige Integration in das Framework.
  • 7. MultiView: In Rails lassen sich Inhalte je nach Anfragetyp darstellen – sollen sie nun als CSV-Datei, RSS-Feed, HTML-Seite oder als spezielle iPhone-Seite Angezeigt werden – SlashDotDash zeigt wie man der eigenen Rails-Applikation ein iPhone-optimiertes User-Interface verpassen kann.

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 ;-)

Ruby-on-Rails Konferenz-Kalender

Die RailsConf 2007 hat dieses Jahr 1.600 Teilnehmern vom 17. bis 20. Mai in Portland in ihren Bann gezogen. Und wenn man David’s Loud Thinking Blog liest, dann scheint die Konferenz trotz der Masse an Leute ein voller Erfolg gewesen sein. Doch nach der Konferenz ist vor der Konferenz … und so geht es dieses Jahr mit dem Konferenzmarathon munter weiter:

22. Juni 2007: Rails-Konferenz.de, Frankfurt, Deutschland
http://www.rails-konferenz.de/
Konferenzsprache Deutsch

22.-23. Juni 2007: Ostrava on Rails, Ostrava, Tschechische Republik
http://ostrava.rails.cz/en/
Konferenzsprache Englisch

17.-19. September 2007: RailsConf Europe, Berlin, Deutschland
http://www.railsconfeurope.com/
Organisiert von O’Reilly – Konferenzsprache Englisch

November 2007: Rails Hispana Conferencia, Madrid, Spanien
http://www.conferenciarails.org/
Konferenzsprache Spanisch

Sicher gibt es noch mehr Konferenzen zum Thema Rails … ein Kommentar genögt ;-)