регенерировать рельсы service_url активное хранилище - PullRequest
0 голосов
/ 06 апреля 2020

Я использую активное хранилище с amazon- aws, а срок службы service_url составляет максимум 1 неделю после истечения срока его действия и выдает ошибку «Отказано в доступе».

Это код, который я скопировал с .rvm/gems/ruby-2.6.4/gems/activestorage-6.0.2.1/lib/active_storage/service/s3_service.rb:68

def url(key, expires_in:, filename:, disposition:, content_type:)
      instrument :url, key: key do |payload|
        generated_url = object_for(key).presigned_url :get, expires_in: expires_in.to_i,
          response_content_disposition: content_disposition_with(type: disposition, filename: filename),
          response_content_type: content_type

        payload[:url] = generated_url

        generated_url
      end
    end

, чтобы заставить его жить вечно. Я переопределил следующий код

def url(key, expires_in:, filename:, disposition:, content_type:)
      instrument :url, key: key do |payload|
          generated_url = object_for(key).public_url
          payload[:url] = generated_url
          generated_url
    end
end


Это работает, но проблема в том, что расположение всегда inline content_type не является типом содержимого файла, это нормально, если я хочу показывать встроенные файлы (например, отображать PDF-файлы и изображения в кране браузера вместо загрузки), теперь, если я хочу, чтобы файлы загружались, добавляя content_type и content_disposition к URL, выдает ошибку «Отказано в доступе», для борьбы с этим я изменил приведенный выше код следующим образом

def url(key, expires_in:, filename:, disposition:, content_type:)
      instrument :url, key: key do |payload|
        if disposition == :inline
          generated_url = object_for(key).public_url
          payload[:url] = generated_url
          generated_url
        else
          generated_url = object_for(key).presigned_url :get, expires_in: 1.week.to_i,
            response_content_disposition: content_disposition_with(type: disposition, filename: filename),
            response_content_type: content_type
          payload[:url] = generated_url
          generated_url
        end
      end
    end 

и это решило мою проблему всего за одну неделю, я подумал, смогу ли я восстановить service_url fre sh после его истечения. кто-нибудь может мне помочь?

для создания встроенного файла Я использую что-то вроде record.service_url

для создания загружаемого URL record.service_url(disposition: :attachment)

...