0

从 Carrierwave 迁移到 Shrine 后,一些测试开始失败。我注意到,#read从安装 Shrine 上传器的列调用时,它只能调用一次。通过做一秒钟#read将返回一个空字符串。也许我缺少一些配置,但相同的代码适用于 Carrierwave(我知道它是一个不同的上传器,但对于我正在经历的迁移到 Shrine 的代码库需要很少/几乎不需要更改)

# shrine.rb -> for testing
require "shrine"
require "shrine/storage/s3"
require "shrine/storage/file_system"

Shrine.plugin :activerecord
Shrine.plugin :cached_attachment_data
Shrine.plugin :determine_mime_type, analyzer: :mime_types

Shrine.storages = {
    cache: Shrine::Storage::FileSystem.new(
      "public",
      prefix: "tmp/cache",
    ),
    store: Shrine::Storage::FileSystem.new(
      "public",
      prefix: "tmp",
    ),
  }
# carrierwave.rb -> for testing

...

config.storage = :file
config.enable_processing = false
4

1 回答 1

2

在您可以读取内容之前,您必须重置“读取指针”。你可以通过调用来做到这一点.rewind

Shrine 能够上传任何实现#read、#rewind、#eof? 方法的类 IO 对象。和 #close ,其行为与 IO 类匹配。

有关详细信息,请参阅getting_started此示例

于 2019-12-16T23:20:49.773 回答