Das Nerdlabor

Rails 3 lib Ordner bei jeder Änderung des Quellcodes neu laden

Bei Code-Änderungen im Rails lib Ordner muss zwingenderweise immer der Server neugestartet werden. Dies ist bei der aktiven Entwicklung natürlich sehr störend. Mit folgender initializer-Datei kannst du dieses Verhalten unterdrücken und es werden bei jedem Request die Dateien im lib-Ordner neu eingelesen. Lege dafür eine neue Initializer-Datei unter config/initalizers an. Der Dateinamen kann beliebig gewählt werden.

1
2
3
4
5
6
7
8
9
if Rails.env == "development"
  lib_reloader = ActiveSupport::FileUpdateChecker.new(Dir["lib/**/*"], true) do
    Rails.application.reload_routes!
  end

  ActionDispatch::Callbacks.to_prepare do
    lib_reloader.execute_if_updated
  end
end

Das sieht zwar jetzt alles gut aus, doch wir müssen in der config/application.rb noch das automatische Laden der Libs aktivieren.

1
 config.autoload_paths += %W( #{config.root}/lib )

Ein Dank geht an den User pbhogan, der auf StackOverflow die Lösung veröffentlicht hat (Link Original Beitrag).

Anmerkung:

Diese Lösung funktioniert leider nicht im lib Ordner von Rails Engines. Dort müssen sich die Entwickler noch etwas einfallen lassen.

Viel Spaß

Comments