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

时间:2012-02-12 02:03:09

标签: ruby-on-rails ruby-on-rails-3.2

如何强制为每个请求重新加载gem?

我开发了一个gem,并希望每次在浏览器中刷新页面时重新加载我的gem代码。我的Gemfile:

gem "my_gem", :path => "../my_gem"

为了解决这个问题,我尝试了stakoverflow中列出的每个建议。什么都没有帮助。还发现了两个Rails配置参数:watchable_dirs和watchable_files。试图使用它们,但它们也不适合我。

2 个答案:

答案 0 :(得分:2)

您应该使用ActiveSupport :: Dependencies unloadable方法将要重新加载的类标记为可卸载;

class YourClass
  unloadable
end

http://apidock.com/rails/ActiveSupport/Dependencies/Loadable/unloadablehttp://robots.thoughtbot.com/post/159805560/tips-for-writing-your-own-rails-engine

应该给你一些背景知识。或者你可以像这样自己重新加载;

Object.send(:remove_const, 'YOUR_CLASS') if Object.const_defined?('YOUR_CLASS')
GC.start
load 'path/to/your_file.rb'

答案 1 :(得分: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

请务必在所有课程中添加“无法加载”。