我有一個寶石:如何讓Rails停止重新加載我的寶石?
# in /Library/Ruby/Gems/1.8/gems/my_gem-1.0.0/lib/my_gem.rb
module MyGem
def do_stuff
..
end
end
而且我裝它的Rails:
# in [rails_root]/config/environment.rb:
config.gem 'my_gem', :version => '1.0.0'
,並用它:
# in [rails_root]/app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
include MyGem
end
但我需要猴子補丁有點在特定環境的方式:
# in [rails_root]/config/environments/development.rb:
MyGem.class_eval do
def do_stuff
raise 'Ack! - just testing'
end
end
不幸的是,MyGem
重新加載每個請求,所以我的猴子補丁是無用的。
我檢查load_once_paths
:
ActiveSupport::Dependencies.load_once_paths
# => ["/Library/Ruby/Gems/1.8/gems/my_gem-1.0.0/lib", "other stuff"]
任何想法我如何能得到我想要的效果?
我正在_requiring_它(隱式地)在environment.rb;我在ApplicationController中_including_它。這些是非常不同的行爲。我想知道的是爲什麼Rails每次重新加載ApplicationController時都會重新加載gem。證明它這樣做是因爲我的猴子補丁消失了。 – 2009-07-23 12:17:30