RequireReloader - Gems beim Entwickeln nachladen

Im Rails-Alltag passiert es oft, dass man selbst erstellte oder lokale Gems in Projekten benutzt. Findet man hierbei einen Fehler im Gem und möchte dem Ganzen näher auf den Grund gehen, so ist es meist sehr mühsam und zeitraubend nach jeder Änderung den Webserver und etwaige Konsolen neu zu starten.

Hier kommt RequireReloader ins Spiel.

Damit kann man ganz einfach alle seine lokalen Gems bei Änderungen erneut laden lassen.

# config/environment/development.rb
YourApp::Application.configure do
  RequireReloader.watch_local_gems!
end

Es ist aber auch möglich, nur bestimmte Gems auf Änderungen zu überwachen:

RequireReloader.watch :my_gem

Mithilfe eines optionalen Pfades kann man auch Klassen in beliebigen anderen Verzeichnissen neuladen lassen, sobald sie sich verändern.

RequireReloader.watch :MyClass, path: 'lib'

Dies ist besonders interessant, wenn man Klassenvariablen oder dergleichen zum Cachen benutzt, denn RequireReloader entfernt vor dem Neuladen die komplette Klasse aus dem Namensraum.

Durch einen kleinen Pull-Request von uns ist es möglich, beliebigen Code nach dem Neuladen auszuführen.

logging = ->(gem) { Rails.logger.debug "#{gem} was reloaded" }
RequireReloader.watch :my_gem, callback: logging

Wir benötigten diese Funktionalität in Nix-wie-weg.de und Hotelbewertung.de, da wir unsere in Gems ausgelagerte Funktionalität an zentraler Stelle konfigurieren. Eben diese Konfiguration muss nach jedem Neuladen ebenfalls wieder angewendet werden.