从Carrierwave迁移到Shrine后,某些测试开始失败。我注意到,从安装Shrine上传器的列中调用#read
时,只能调用一次。再执行第二次#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
答案 0 :(得分:2)
在读取内容agian之前,必须重置“读取指针”。
您可以致电.rewind
。
Shrine能够上传任何实现方法#read,#rewind,#eof?的类似IO的对象。和#close,其行为与IO类相匹配。
有关详细信息,请参见getting_started和this examle。