我在sidekiq作业中使用此方法:
def attach_poster(poster_url,obj)
resp = HTTParty.get(poster_url)
file = Tempfile.new
begin
file.binmode
file.write(resp.body)
file.rewind
obj.poster.attach(io: file, filename: "poster.png")
ensure
file.close
file.unlink
end
end
只有当我用.perform_inline开始作业时,这才有效,如下所示:ImportJob.perform_inline(poster_url,obj)
当我使用.perform_async时,文件没有正确附加,这会导致FileNotFoundError。为什么?
我想使用perform_async,以便作业从主进程异步运行。
我使用的是Ubuntu 20.04,Rails和Sidekiq的最新版本。
我认为这里的问题是,在文件完全上传之前,作业已排队,因此出现ActiveStorage::FileNotFound
错误。
我认为这个猴子补丁在这种情况下会对你有所帮助。(我从下面github上的评论中复制了代码,让你更容易,但这要归功于对这个问题发表评论的人)。
还有另一个stackoverflow问题,并且已经用相同的解决方案进行了回答->此处
这里的另一个问题是如何使ActiveStorage::Attached#attach
函数同步运行->此处
希望这能有所帮助,如果你有任何其他问题,请告诉我,我非常乐意提供帮助。
module ActiveStorage::Blob::Analyzable
def analyze_later
analyze
end
end