8

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

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

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

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

4

2 回答 2

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'
于 2012-03-12T15:47:22.937 回答
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”。

于 2014-03-15T01:41:53.593 回答