Это не перезагружает гем-файлы при каждом запросе.

я есть приложение Rails, которое использует гем, который я активно разрабатываю. Как я могу поручить приложению перезагружать гем при каждом запросе?

Ответы на вопрос(2)

Это решение почти работает, но по какой-то причине я должен положить его вapplication.rb и не вenvironments/development.rb в противном случае пути autoload_path не распознаются.

Я добавил несколько дополнительных вещей, которые автоматически выбирают пути.

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

Местные драгоценные камни могут быть добавлены сgem 'my_gem', :path => '../my_gem'

 Andy Ray13 февр. 2019 г., 03:23
Старый ответ я знаю, но я думаю, что это имеет некоторые проблемы. Он не работает с драгоценными камнями с именамиnamespace-gemname потому что.classify преобразует это неправильное имя. Также я понимаю, что это заставляет вашу структуру папок gem соответствовать ожиданиям Rails
 brauliobo16 дек. 2015 г., 13:17
замечательное решение, спасибо!
 Andy Ray14 февр. 2019 г., 02:57
Это кажется чем-то вроде неукротимого кошмара при работе с драгоценными камнями с вложенными пространствами имен.
 fkoessler15 июн. 2015 г., 11:33
Это решение прекрасно работает, даже если добавить вenvironments/development.rb
 Matt Hucke04 мая 2016 г., 20:11
Спасибо. Он также прекрасно работает в нижней части файла RSpec rails_helper, окруженного "Rails.application.configure do..end". (Я использую Spring, поэтому необходима автоматическая перезагрузка, поскольку этот процесс длится много тестовых прогонов)

autoload пути для приложения.

Итак, в 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/**/"]

Затем, при запуске вашего сервера разработки, все файлы тамдолжен быть перезагружен.

 Jack Kinsella22 июн. 2011 г., 17:00
Я попробовал ваше решение на более традиционном жемчужине в консоли rails, и оно не перезагрузило жемчужину после отправки перезагрузки! сообщение. Возможно, это может работать в самом приложении. Мне придется подождать и посмотреть.
 Jits02 июн. 2011 г., 13:50
ХОРОШО. Спасибо за обновления. Дайте нам знать, если у вас получится.
 benvds20 июл. 2011 г., 20:56
Просто первый ряд, и это сработало для меня. Спасибо!
 Jack Kinsella02 июн. 2011 г., 11:03
Спасибо, но это не сработало для меня ... может быть, драгоценный камень очень нетрадиционный - это плагин Spree для двигателя. Я вернусь к вопросу, когда буду разрабатывать более привычную жемчужину.

Ваш ответ на вопрос