如何在开发模式下的每个请求上重新加载gem?

Jac*_*lla 32 ruby-on-rails-3

我有一个Rails应用程序,它使用我正在积极开发的宝石.如何指示应用程序在每次请求时重新加载gem?

Kaw*_*oru 18

这个解决方案几乎可以工作,但由于某种原因我必须把它放进去application.rb,environments/development.rb否则不能识别autoload_paths.

我添加了一些自动获取路径的附加内容.

if Rails.env.development?
  reload_gems = %w(my_gem other_gem) # names of gems which should autoreload
  config.autoload_paths += Gem.loaded_specs.values.inject([]){ |a,gem| a += gem.load_paths if reload_gems.include? gem.name; a }
  require 'active_support/dependencies'
  ActiveSupport::Dependencies.explicitly_unloadable_constants += reload_gems.map { |gem| gem.classify }
end
Run Code Online (Sandbox Code Playgroud)

可以添加本地宝石 gem 'my_gem', :path => '../my_gem'


Jit*_*its 5

您可以autoload在应用程序的路径中添加gem的路径.

所以,在config/application.rb中,在class Application < Rails::Application ... end块中添加:

config.autoload_paths += %W(#{config.root}/vendor/gems/my_gem/lib)
config.autoload_paths += Dir["#{config.root}/vendor/gems/my_gem/lib/**/"]
Run Code Online (Sandbox Code Playgroud)

然后,在运行开发服务器时,重新加载其中的所有文件.

  • 我在 rails 控制台中的更传统的 gem 上尝试了您的解决方案,但在发送重新加载后它没有重新加载 gem!信息。也许它可以在应用程序本身中工作。我得等着瞧。 (2认同)