Ответ 1
Попробуйте следующее:
load "#{Rails.root}/lib/yourfile.rb"
У меня есть модуль в моем проекте Rails под lib. Я запускаю "рельсы c" и экспериментирую в консоли. Я вношу изменения в модуль под lib, типа 'reload!' из консоли и не перезагружает файл. Мне нужно выйти из консоли и перезагрузить, что является настоящей болью.
Есть ли лучший способ перезагрузить этот файл?
Попробуйте следующее:
load "#{Rails.root}/lib/yourfile.rb"
В случае, если кому-то интересно, здесь мои выводы о как автоматически перезагрузить файлы в Rails без перезапуска сервера.
Теперь решение доступно как драгоценный камень Ruby require_reloader.
это 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!
на любом объекте для перезагрузки исходного кода.
Добавьте в 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!
в консоли