2014-01-04 2 views
0

Я пытаюсь использовать Carrierwave для загрузки файлов, а затем после завершения загрузки используйте парсер XML ruby-nmap для заполнения некоторых полей.Carrierwave Загрузка XML-файла и ruby-nmap не находит его

Я установил таймер сна на 8, чтобы убедиться, что файлы загружаются. Я установил это целых 20. Я вижу, как они загружаются и находятся в правильном каталоге. Однако ruby-nmap говорит, что он не может найти файл, как будто его не существует.

Я создал простой эшафот, и я манипулирую частью «def create».

код

контроллер:

def create 
@nmapfile = Nmapfile.new(nmapfile_params) 
@nmapfile.nmapfilerecords = 0 
@nmapfile.save 
sleep 8 
Nmap::XML.new(@nmapfile.nmapxml.to_s) do |xml| 
    xml.each_host do |host| 
     if "#{host.status}" == "down"    
     else 
     @nmapfile.nmapfilerecords += 1 
     end 
    end 
end 

respond_to do |format| 
    if @nmapfile.save 
    format.html { redirect_to @nmapfile, notice: 'nmap file was successfully created.' } 
    format.json { render action: 'show', status: :created, location: @nmapfile } 
    else 
    format.html { render action: 'new' } 
    format.json { render json: @nmapfile.errors, status: :unprocessable_entity } 
    end 
end 
end 

Ошибка я получаю: Errno :: ENOENT в NmapfilesController # не создавать (Нет такого файла или каталога - /uploads/nmapfile/nmapxml/21/scan.xml)

И все же, scan.xml существуют в этом каталоге.

Я запускал это так же, как просто работает рубиновый скрипт. На дисплее отображается 11 на экране консоли. Таким образом, в файле нет проблемы. Это здесь.

require 'nmap/xml' 
nmapfilerecords = 0 
Nmap::XML.new('/Users/colemk1/Documents/Aptana Studio 3 Workspace/JumpSquares/public/uploads/nmapfile/nmapxml/21/scan.xml') do |xml| 
    xml.each_host do |host| 
     if "#{host.status}" == "down"    
     else 
     nmapfilerecords += 1 
     end 
    end 
    puts nmapfilerecords 
end 

Любая помощь приветствуется

ответ

0

пришел узнать, то XML парсер Nmap должен иметь полный путь.

установки полного пути сделал его работу правильно:

Nmap::XML.new('/Users/colemk1/Documents/Aptana Studio 3 Workspace/JumpSquares/public/' + @nmapfile.nmapxml.to_s) do |xml| 

или использовать рельсы корневого путь

Nmap::XML.new("#{Rails.root}/public/" + @nmapfile.nmapxml.to_s) do |xml| 
Смежные вопросы