0
我有一個奇怪的情況,其中$」似乎在通話之間仍然存在,但沒有其他任何事情。它正確地返回第一個電話,並且失敗每個額外的請求。這應該是全球信息,所以它不會僅僅將它放在會話中。
這些註釋顯示了什麼是日誌記錄返回,但是我對「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
即使我給了我這個答案,我還不是100%滿意。問題在於,在第一個過程之後,類本身不再存在。 – 2010-02-21 19:48:31