如何在Rails 3.2中为每个请求重新加载gem?

8
如何在每个请求中强制重新加载 gem?
我正在开发一个 gem,希望在浏览器刷新页面时能够重新加载我的 gem 代码。以下是我的 Gemfile 内容:
gem "my_gem", :path => "../my_gem"

为了解决问题,我尝试了stackoverflow上列出的所有建议,但都没有帮助。我还发现了两个Rails配置参数:watchable_dirs和watchable_files。尝试使用它们,但它们对我也不起作用。

3
有人必须问:为什么?你想解决什么问题? - Jordan Running
5
乔丹的问题很明显:因为他正在开发一个宝石(gem),所以希望能够无缝地进行更改和调试。 - apneadiving
我猜你应该在gem的初始化文件中使用to_prepare语句来要求它,参见http://guides.rubyonrails.org/configuring.html#initialization-events。 - apneadiving
@apneadiving 我在development.rb中尝试了两个选项:(1)MyApp :: Application.configure do config.to_prepare do require "../my_gem/lib/my_gem/helper.rb" end end(2)ActionDispatch :: Callbacks.to_prepare do require "../my_gem/lib/my_gem/helper.rb" end都没有起作用。出了什么问题? - Vadim
@apneadiving 如果你查看修订历史,你会发现一开始并不明显,尽管那当然是我的猜测。 - Jordan Running
2个回答

2

问题在于我构建了一个模块,然后将其包含到ActionView中:ActionView::Base.send :include, MyGem::Helper。所以我没有类。在这种情况下,我应该在哪里使用方法“unloadable”? - Vadim
太完美了,这解决了我的问题!我只需将 unloadable if Rails.env.development? 放入我的模块中,它就像魔法一样运行。谢谢! - Joshua Muheim

2

我为此进行了相当多的搜索,但最终需要一些尝试和错误。

lib/my_gem/my_gem.rb:

require 'active_support/dependencies'
ActiveSupport::Dependencies.autoload_paths += [File.expand_path("..", __FILE__)]

module MyGem
  include ActiveSupport::Dependencies
  unloadable
end

请确保在所有类中添加“unloadable”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接