Irgendwann, vermutlich nach einem Update von Ruby und/oder Rails, stand die History meiner Rails Console nicht mehr zur Verfügung.

Nachdem ich damit eine gewisse Zeit leben konnte, wollte ich heute dem Grund auf die Schliche kommen.

Nach einigem Probieren kam ich darauf, dass die Konsole und deren History unter ~/.irb_history schon funktioniert. Sie wird allerdings durch die Datei ~/.rdebug_hist erweitert.

Ein Durchlaufen der einzelnen Einträge durch "Pfeil-Taste hoch" lief erst durch die Einträge des Debuggers und fand dann irgendwann auch die Einträge aus ~/.irb_history. Man musste nur oft genug Tippen :).

Ein Löschen der Datei ~/.rdebug_hist führte dazu, dass die letzten Einträge in der Konsole beim nächsten Aufruf sofort zur Verfügung standen.

Die Datei ~/.rdebug_hist wird durch ruby-debug (genauer ruby-debug-0.10.3/cli/ruby-debug/interface.rb) eingelesen und geschrieben. Ich habe den Code noch nicht ganz durchschaut, aber die Datei wurde trotz des Einsatzes des Debuggers bisher nicht wieder erzeugt. Sicherheitshalber habe ich die Datei selbst schreibgeschützt angelegt, um eine erneute Erzeugung zu vermeiden.


touch ~/.rdebug_hist
chmod 400 ~/.rdebug_hist

Logging in der Rails-Console reaktiviert

Darüber hinaus habe ich das Aktivieren und Deaktivieren der Logausgaben in der Rails-Konsole wieder hinbekommen. Meine ~/.irbrc sieht wie folgt aus:


    1 require 'rubygems'
    2 require 'wirble'
    3 require 'pp'
    4 
    5 Wirble.init
    6 Wirble.colorize
    7 
    8 def ri(*names)
    9   system(%{ri #{names.map {|name| name.to_s}.join(" ")}})
   10 end
   11 
   12 if ENV.include?('RAILS_ENV') 
   13 
   14   def sql(query)
   15     ActiveRecord::Base.connection.select_all(query)
   16   end
   17 
   18   def logon
   19     set_logger Logger.new(STDOUT)
   20   end
   21   
   22   def logoff
   23     set_logger @logger
   24   end
   25 
   26   def get_logger
   27     ActiveRecord::Base.connection.instance_variable_get("@logger")
   28   end
   29 
   30   def set_logger(logger)
   31     @logger ||= get_logger
   32     ActiveRecord::Base.connection.instance_variable_set("@logger", logger)
   33   end
   34   
   35 end
   36 

Update: Ich nutze Rails 2.3.4 und Ruby ruby 1.8.7