ActiveStorage::IntegrityError 何时引发?

kan*_*kyu 10 rails-activestorage ruby-on-rails-5.2

我的应用程序(本地)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") %>
Run Code Online (Sandbox Code Playgroud)

编辑:它可能与删除storage/目录有关(它发生在我删除之后),也可能是因为它发生在工作中(完整的错误是Error performing ActivityJob (Job ID: .. ) from Async( .. ) in .. ms: ActiveStorage::IntegrityError (ActiveStorage::IntegrityError)

这不会将文件添加到storage/文件夹,但当我尝试附加它们时,它会在其下生成文件夹。

Mil*_*ica 15

正如评论中提到的,发生这种情况的一个原因是文件对象位于文件的末尾,这就是本例中的问题。它可以在这里修复temp_file.rewind


Aiv*_*oss 6

很奇怪。更新到 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;
Run Code Online (Sandbox Code Playgroud)