什么时候出现ActiveStorage :: IntegrityError?

时间:2018-09-14 16:22:13

标签: 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") %>

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

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

2 个答案:

答案 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;