Rubys require ist unter Linux case-sensitiv
Als ich gestern Abend eine Rails-Anwendung, die ich in den letzten Tagen auf dem Mac entwickelt hatte, auf einen Linux-Server depoyen wollte, trat ein seltsames Phänomen auf.
Nach dem Anlegen der Production-Datenbank wollte ich mittels “RAILS_ENV=production rake db:migrate” das DB-Schema einrichten. rake brach jedoch mit einem Fehler ab: “no such file to load — CSV”. Auf dem Mac konnte ich das Kommando absetzen. Und die Development-Version lief auch problemlos. Die in dem Projekt verwendete CSV-Klasse lag auch am Linux-Server unter /usr/lib/ruby/1.8/csv.rb.
Es hat mich ewig gekostet, die Ursache zu finden. Warum trat der Fehler bei einem rake-Aufruf in der Production-Version, aber nicht in der Development-Version auf? Der Grund: rails lädt im Production-Environment alle Klassen im Voraus. Daher tritt das Problem bereits beim Initialisieren auf.
Und was ist nun mit dem Fehler? In einer Datei stand require ‘CSV’, das ich per copy’n'paste aus dem Beispiel von einer Website kopiert hatte. Auf dem Mac ist das offenbar kein Problem. Unter Linux schon. Nachdem ich es in require ‘csv’ geändert hatte, lief rake anstandslos durch.
Damit mir — und Euch — das nicht noch einmal passiert, habe ich es hier aufgeschrieben.






