每当尝试附加文件时,我的应用程序(本地)都会引发ActiveStorage::IntegrityError
错误。如何摆脱这个错误?
我只有一个has_one_attached
,但我不知道该错误是如何产生的。
# model
has_one_attached :it_file
Tempfile.open do |temp_file|
# ...
it_file.attach(io: temp_file, filename: 'filename.csv', content_type: 'text/csv')
end
# storage.yml
local:
service: Disk
root: <%= Rails.root.join("storage") %>
编辑:它可能与删除storage/
目录(在我删除该目录之后发生)有关,或者可能是因为它在工作中发生(完整错误为Error performing ActivityJob (Job ID: .. ) from Async( .. ) in .. ms: ActiveStorage::IntegrityError (ActiveStorage::IntegrityError)
这不会将文件添加到storage/
文件夹中,但是当我尝试附加文件时会在其下生成文件夹。
答案 0 :(得分:1)
如评论中所述,发生这种情况的原因之一是文件对象位于文件的末尾,在这种情况下就是问题所在。可以使用Tempfile.rewind
进行修复。
答案 1 :(得分:1)
很奇怪。更新到Rails 6.0之后,我必须重新计算一些校验和。是的,我用了dokku,docker。更新之前还好。
# Disk service is in use for ActiveStorage
class ProjectImage < ApplicationRecord
has_one_attached :attachment
end
# update all checksums
ProjectImage.all.each do |image|
blob = image.attachment.blob
blob.update_column(:checksum, Digest::MD5.base64digest(File.read(blob.service.path_for(blob.key))))
end;