Carrierwave Remote URL 错误引发 IOError,'attempt to read body out of block'如果@socket.closed?



我在Rails应用程序上使用来自CarrierWave的remote_url远程上传图像。它过去工作得很好,但现在我遇到了问题

控制器

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

上传程序

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更新。。。

Carrierwave安装了类似于gem ssrf_filter的依赖项,并且此gem的持续版本解决了此问题。您需要安装版本为1.0.8的ssrf_filtergem

gem 'ssrf_filter', '1.0.8'

有关的更多详细信息https://github.com/carrierwaveuploader/carrierwave/issues/2625

相关内容

最新更新