Загрузите активное приложение Storage на диск - PullRequest
0 голосов
/ 25 мая 2018

В руководстве сказано, что я могу сохранить вложение на диск, чтобы запустить на нем процесс следующим образом:

message.video.open do |file|
  system '/path/to/virus/scanner', file.path
  # ...
end

Моя модель имеет вложение, определенное как:

has_one_attached :zip

А затем в модели я определил:

def process_zip      
  zip.open do |file|
    # process the zip file
  end
end

Однако я получаю сообщение об ошибке:

private method `open' called

при вызове zip.open.

Как локально сохранить почтовый индекс для обработки?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

В качестве альтернативы в Rails 5.2 вы можете сделать это:

def process_zip      
   # Download the zip file in temp dir
   zip_path = "#{Dir.tmpdir}/#{zip.filename}"
   File.open(zip_path, 'wb') do |file|
       file.write(zip.download)
   end   

   Zip::File.open(zip_path) do |zip_file|  
       # process the zip file
       # ...
       puts "processing file #{zip_file}"
   end
end
0 голосов
/ 25 мая 2018

Это руководство по краю (примечание edgeguides.rubyonrails.org в URL);это относится к основной ветви репозитория rails / rails на GitHub.Последние изменения в master еще не были включены в выпущенную версию Rails.

Скорее всего, вы используете Rails 5.2.Используйте рельсы, чтобы воспользоваться преимуществами ActiveStorage::Blob#open:

gem "rails", github: "rails/rails"
...