У меня странная ситуация, когда $ ", кажется, выживает между вызовами, но больше ничего не делает. Он правильно возвращает первый вызов и не выполняет каждый дополнительный запрос. Это должна быть глобальная информация, поэтому она не будет работать только для поместите это в сессию.
Комментарии показывают, что возвращает журналирование, но мой опыт работы с FileImport.installed_formats () заключается в том, что при первой загрузке заполненной им страницы она правильно возвращает ["CSV", "FixedText"]. Я вызываю FileImport.installed_formats () несколько раз в одном вызове для целей тестирования, и он работает нормально. Однако когда я обновляю страницу, метод возвращает пустой массив.
Что такое «лучшее» исправление? Я действительно не хочу разрушительно удалять $ "каждый раз, так как знаю, что сервер пытается кэшировать классы. Есть ли более чистый способ просмотра установленных классов без метода Class.constants?
def FileImport.installed_formats()
FileImport.require_import_folder()
return FileImport.constants
end
def FileImport.require_import_folder()
logger = RAILS_DEFAULT_LOGGER
#this is giving me what I expect... ["lib/file_import/fixed_text.rb", "lib/file_import/csv.rb"]
logger.debug("WHY? " + Dir["lib/file_import/*.rb"].inspect)
#This is giving me two different things:
#First run: []
#Second run: ["lib/file_import/fixed_text.rb", "lib/file_import/csv.rb"]
logger.debug(($".select {|v| v =~ /file_import/}).inspect)
Dir["lib/file_import/*.rb"].each do |i|
i.sub(/lib\//,"")
# $".delete(i) #I'd rather not do this, if there's a cleaner way...
require i
end
#first time, this gives what i want: ["CSV", "FixedText"]
#When I refresh, I get [] instead...
logger.debug("SHOULDINSTALL: " + FileImport.constants.inspect)
#Both times this gives the expected: ["lib/file_import/fixed_text.rb", "lib/file_import/csv.rb"]
logger.debug(($".select {|v| v =~ /file_import/}).inspect)
end