2014-01-08 2 views
0

Я пытаюсь прочитать некоторые текстовые файлы для разных грузовиков, хранящих данные о широте и долготе, но не имея проблем с поиском файлов на ПК с Windows, где они сохранены. Я пробовал несколько переменных gps_file (см. Ниже), но каждый раз в процессе производства я получаю не могу найти ошибку файла (Errno :: ENOENT (Нет такого файла или каталога - C: \ Rtmx \ Reports \ 2014 \ January \ 08 \ 53 .текст)). Когда я «копирую файл как путь», я получаю эту строку - «C: \ Rtmx \ Reports \ 2014 \ January \ 08 # {truck_number} .txt», которая, похоже, совпадает с моими журналами heroku, но все еще бросает ошибку. Когда я пытаюсь использовать свой Mac в dev через другую файловую структуру, он отлично работает. Я застрял в этой проблеме часами. Любое руководство будет высоко оценено. Благодаря!Поиск нужного файла Windows

При открытии файла в Chrome, я получаю следующий путь для одного из грузовиков: файла: /// C: /Rtmx/Reports/2014/January/08/75.txt

def update_locations 
    require 'csv' 
    @locations = Location.where(id: [3,4]) 

    @locations.each do |location| 
     gps_file = "C:\\Rtmx\\Reports\\#{DateTime.now.strftime('%Y').to_s}\\#{DateTime.now.strftime('%B').to_s}\\#{DateTime.now.strftime('%d').to_s}\\#{location.locationable.name.to_s}.txt" 
     data = File.read(gps_file).gsub(",","") 
     csv = CSV.parse(data, :headers => true) 
     @location_log = Array.new 
     csv.each do |row| 
      row = row 
      @location_log << row 
     end 
     @latest_location_data = @location_log.last 
     csv_array = "#{@latest_location_data},String".parse_csv 
     array = csv_array.first.split("\t") 
     raw_latitude = array[11].split(' ') 
     latitude = raw_latitude[0].gsub("N","").to_f + raw_latitude[1].to_f/60 + raw_latitude[2].to_f/3600 
     raw_longitude = array.last.split(' ') 
     longitude = (raw_longitude[0].gsub("W","").to_f + raw_longitude[1].to_f/60 + raw_longitude[2].to_f/3600)*-1 
     location.update(latitude: latitude, longitude: longitude) 
     end 
    redirect_to locations_url 
    end 

ответ

0

Проблема заключалась в попытке прочитать файл на компьютере пользователя с помощью контроллера. Вместо этого я переместил файлы в Amazon S3 в режиме реального времени, как изменено, и прочитал оттуда в контроллере.

require 'csv' 
require 'open-uri' 

@locations = Location.all 
    def test_url(gps_file, location) 
     begin 
     data = gps_file.read.gsub(",","") 
     csv = CSV.parse(data, :headers => true) 
     @location_log = Array.new 
     csv.each do |row| 
      @location_log << row 
     end 
     @latest_location_data = @location_log.last 
     csv_array = "#{@latest_location_data},String".parse_csv 
     array = csv_array.first.split("\t") 
     lat = array[11] 
     if lat[0].present? 
      raw_latitude = lat.split(' ') 
      latitude = raw_latitude[0].gsub("N","").to_f + raw_latitude[1].to_f/60 + raw_latitude[2].to_f/3600 
      raw_longitude = array.last.split(' ') 
      longitude = (raw_longitude[0].gsub("W","").to_f + raw_longitude[1].to_f/60 + raw_longitude[2].to_f/3600)*-1 
      speed = array[7] 
      location.update(latitude: latitude, longitude: longitude, speed: speed) 
     end 
     rescue 
     end 
    end 
    @locations.each do |location| 
     s3=AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'us-east-1') 
     gps_file = s3.buckets['wheresmyconcrete'].objects["real/#{DateTime.now.strftime('%B').to_s}/#{DateTime.now.strftime('%d').to_s}/#{location.locationable.name.to_s}.txt"] 
     test_url(gps_file, location) 
    end 
Смежные вопросы