Carrierwave Remote URL error raise IOError, 'attempt to read body out of block' if @socket.closed?

Я загружаю изображение удаленно, используя remote_url из CarrierWave в моем Rails приложении. Раньше это работало нормально, но теперь я получаю проблему

Контроллер

@pool = Pool.new(remote_main_picture_url: "https://myimageurl...")
if @pool.save //is causing the error
....
end

Uploader

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  def store_dir
    "#{ENV['AWS_S3_BUCKET_NAME']}/#{model.class.to_s.underscore}/#{model.id}"
  end

  def extension_allowlist
    %w(jpg jpeg gif png svg webp)
  end

  process resize_to_fit: [2000, 2000]

  version :medium do
    process resize_to_fit: [400, 400]
  end

  def filename
    @name ||= "#{mounted_as}_#{timestamp}.png" if original_filename.present?
  end

  def timestamp
    var = :"@#{mounted_as}_timestamp"
    model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
  end
end

Gemfile

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '3.0.2'

gem 'rails', '~> 6.1.4'
gem 'pg'
gem 'puma'

gem 'bootsnap', '1.10.3', require: false
gem "webpacker"

gem 'carrierwave', '~> 2.0'
gem 'fog-aws'
gem 'mini_magick'

Сообщение об ошибке

NoMethodError (undefined method `closed?' for nil:NilClass
raise IOError, 'attempt to read body out of block' if @socket.closed?

Похоже, что ошибка связана с net/http, я не знаю, что изменилось, чтобы вызвать эту проблему... Может быть, обновление gemfile...

Получение данных из формы с помощью JavaScript - краткое руководство
Получение данных из формы с помощью JavaScript - краткое руководство
Получить данные из формы с помощью JS очень просто: вы запрашиваете элемент формы, передаете его конструктору new FormData() и, наконец, получаете...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
3
0
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Carrierwave установил гем ssrf_filter как зависимость и последняя версия этого гема вызвала эту проблему. Вам нужно установить гем ssrf_filter версии '1.0.8'

gem 'ssrf_filter', '1.0.8'

Подробнее https://github.com/carrierwaveuploader/carrierwave/issues/2625

Другие вопросы по теме