Может ли Rails консоли перезагрузить модули под lib?

У меня есть модуль в моем проекте Rails под lib. Я запускаю "рельсы c" и экспериментирую в консоли. Я вношу изменения в модуль под lib, типа 'reload!' из консоли и не перезагружает файл. Мне нужно выйти из консоли и перезагрузить, что является настоящей болью.

Есть ли лучший способ перезагрузить этот файл?

Ответ 1

Попробуйте следующее:

load "#{Rails.root}/lib/yourfile.rb"

Ответ 3

это monkeypatch, который может вам помочь, вставьте это в консоль rails (или вы можете поместить этот код в файл monkeypatch), хотя я не рекомендую monkeypatching Object с помощью метода утилиты):

class Object
  def self.reload_myself!
    method = (self.instance_methods(false) + self.methods(false)).select{|method| method.to_s[0] =~ /[A-Za-z]/}.last
    if method
      if self.instance_methods(false).index method
        method = self.instance_method(method)
      elsif
        method =  self.method(method)
      end

      if (method.source_location)
        source_location = method.source_location[0]
        puts "reloading: #{source_location}"
        load "#{source_location}"
      else
        puts "could not reload #{self.name}"
      end
    end
  end
end

и вы можете позвонить

reload_myself!

на любом объекте для перезагрузки исходного кода.

Ответ 4

Добавьте в config/initializers/reload.rb

следующее:
class Object
  def reload_lib!
    Dir["#{Rails.root}/lib/**/*.rb"].map { |f| [f, load(f) ] } #.all? { |a| a[1] } 
    # uncomment above if you don't want to see all the reloaded files
  end
end

Теперь вы можете перезагрузить все файлы в lib, введя reload_lib! в консоли