【问题标题】:delayed_job and paperclip - Images aren't processed, but no error?delay_job 和回形针 - 图像未处理,但没有错误?
【发布时间】:2012-03-24 16:04:49
【问题描述】:

我在尝试让 delay_job 与 Amazon S3 和 Paperclip 一起工作时遇到了大问题。有一些关于如何做到这一点的帖子,但无论出于何种原因,它根本不适合我。我已经删除了一些其他人如何做的事情 - 最初我在 regenerate_styles 中有一个 save(validations => false),但这似乎导致了一个无限循环(由于 after save catch),并且没有似乎是必要的(因为 URL 已保存,只是图像未上传)。这是我的模型文件中的相关代码,submission.rb

class Submission < ActiveRecord::Base
  has_attached_file :photo ...

  ...

  before_photo_post_process do |submission|
    if photo_changed?
      false
    end
  end

  after_save do |submission|
    if submission.photo_changed?
      Delayed::Job.enqueue ImageJob.new(submission.id)
    end
  end

  def regenerate_styles!
    puts "Processing photo"
    self.photo.reprocess!
  end

  def photo_changed?
    self.photo_file_size_changed? ||
    self.photo_file_name_changed? ||
    self.photo_content_type_changed? ||
    self.photo_updated_at_changed?
  end
end

还有我的位于 submit.rb 文件底部的小 ImageJob 类:

class ImageJob < Struct.new(:submission_id)
  def perform
    Submission.find(self.submission_id).regenerate_styles!
  end
end

据我所知,作业本身已正确创建(因为我可以通过查询将其从数据库中提取出来)。

问题出现在:

$ rake jobs:work
WARNING: Nokogiri was built against LibXML version 2.7.8, but has dynamically loaded 2.7.3
[Worker(host:Jarrod-Robins-MacBook.local pid:21738)] New Relic Ruby Agent Monitoring DJ worker host:MacBook.local pid:21738
[Worker(host:MacBook.local pid:21738)] Starting job worker
Processing photo
[Worker(host:MacBook.local pid:21738)] ImageJob completed after 9.5223
[Worker(host:MacBook.local pid:21738)] 1 jobs processed at 0.1045 j/s, 0 failed ...

然后 rake 任务卡住并且永远不会退出,并且图像本身似乎没有被重新处理。

有什么想法吗?

编辑:还有一点;同样的事情也发生在 heroku 上,而不仅仅是本地。

【问题讨论】:

    标签: ruby-on-rails amazon-s3 paperclip delayed-job


    【解决方案1】:

    延迟作业正在捕获所有失败作业的堆栈跟踪。它保存在delayed_jobs 表的last_error 列中。使用数据库 gui 也可以查看发生了什么。

    如果您应该使用Collective Ideas fork with ActiveRecord as backend,您可以像往常一样查询模型。获取所有堆栈跟踪的数组,例如做

    Delayed::Job.where('failed_at IS NOT NULL').map(&:last_error)
    

    默认情况下,失败的作业会在 25 次尝试失败后被删除。可能是没有工作了。通过设置防止出于调试目的删除

    Delayed::Worker.destroy_failed_jobs = false
    

    在你的config/initializers/delayed_job_config.rb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多