回形针附件已保存,然后读取,但未找到

时间:2014-08-14 21:08:11

标签: ruby-on-rails-4 asynchronous filesystems paperclip

我的应用程序接收电子邮件,将其存储到电子邮件模型(作为回形针附件的电子邮件)并进行处理。有时会发生在处理时间内电子邮件消息不可用的情况。到目前为止,我还没有能够重现这个问题,但它偶尔发生在我的生产服务器上。

我怀疑在堆栈中的某个地方异步处理文件的保存。但是在哪里。

保存电子邮件模型并以

开始处理
email = Email.new
email.yaml_message = StringIO.new(@message.to_yaml)
email.save!
Email.delay(:retry => false).process(email.id)

这是Sidekiq的延迟扩展,用于将处理移动到新线程中。

然后在电子邮件模型中,我用

阅读了该消息
def message
  begin
    Mail::Message.from_yaml(File.read(yaml_message.path))
  rescue
    nil
  end
end

在电子邮件处理过程中,我致电message.from,有时邮件为nil。但是当我进入服务器并在控制台中打开模型时,消息就在那里。除了异步文件保存之外我什么也想不到可能导致这样的事情。

Paperclip是引入异步文件保存还是在堆栈中更深层次?

1 个答案:

答案 0 :(得分:0)

问题是服务器上运行的Sidekiq进程已经过时了。我应该只运行一个Sidekiq进程,但其中有四个。另一个副问题不是问题,但最古老的流程是指已经从服务器中删除的代码。

现在我需要弄清楚如何在部署新版本时处理Capistrano,Monit和长期运行的Sidekiq进程。