Ich habe ein Juwel:Wie bekomme ich Rails, um das Laden meiner Edelsteine zu stoppen?
# in /Library/Ruby/Gems/1.8/gems/my_gem-1.0.0/lib/my_gem.rb
module MyGem
def do_stuff
..
end
end
Und ich lud es in Rails:
# in [rails_root]/config/environment.rb:
config.gem 'my_gem', :version => '1.0.0'
und benutzte es:
# in [rails_root]/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
include MyGem
end
Aber ich muss Affen-Patch es ein bisschen in ein umgebungsspezifischer Weg:
# in [rails_root]/config/environments/development.rb:
MyGem.class_eval do
def do_stuff
raise 'Ack! - just testing'
end
end
Leider lädt MyGem
bei jeder Anfrage neu, so dass mein Affe-Patching nutzlos ist.
Ich habe load_once_paths
geprüft:
ActiveSupport::Dependencies.load_once_paths
# => ["/Library/Ruby/Gems/1.8/gems/my_gem-1.0.0/lib", "other stuff"]
eine Ahnung, wie ich die Wirkung Ich möchte bekommen?
Ich bin _requiring_ es (implizit) in environment.rb; Ich schließe _ es in ApplicationController ein. Das sind sehr unterschiedliche Aktionen. Ich frage mich, warum Rails das Juwel jedes Mal neu lädt, wenn es ApplicationController neu lädt. Der Beweis dafür ist, dass mein Affenflicken weggeht. –