如何强制 ActiveStorage::Attached#attach 同步运行——禁用异步行为

rob*_*rob 6 ruby-on-rails rails-activestorage

反正是有,我可以强制使用方法,ActiveStorage ::附#附加排队后台作业?换句话说,我想禁用似乎包含在其中的异步行为,ActiveStorage::Attached#attach以便该方法与ActiveJobSidekiq 之类的东西同步执行而不是异步执行

Jac*_*uen 2

目前这似乎有效:

def sync_attach(record, name, attachable)
  blob = ActiveStorage::Blob.create_and_upload!(
    io: attachable.open, filename: attachable.original_filename
  )
  blob.analyze
  attached = record.send(name)
  attached.purge
  attached.attach(blob)
end

# Given
class Thing < ActiveRecord::Base
  has_one_attached :image
end

# You can do
thing = Thing.create!
sync_attach(thing, :image, attachable)

Run Code Online (Sandbox Code Playgroud)

如果您使用镜像,您还应该在该方法中包含镜像。

我欢迎并寻求任何警告、更正、补充等。这是迄今为止我想到的最好的。