delayed_job и paperclip - изображения не обрабатываются, но нет ошибок? - PullRequest
3 голосов
/ 07 марта 2012

У меня большие проблемы с попыткой заставить delayed_job работать с Amazon S3 и Paperclip.Есть несколько сообщений о том, как это сделать, но по какой-то причине это просто не работает для меня.Я удалил пару вещей из того, как это делают другие - изначально у меня было save (validations => false) в регенерате_стилей, но это, казалось, вызывало бесконечный цикл (из-за перехвата после сохранения), и не сделалкажется необходимым (так как 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

И мой маленький класс ImageJob, который размещается в нижней части файла submission.rb:

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 застревает и никогда не завершается, а сами изображения, по-видимому, не были повторно обработаны.

Любойидеи?

РЕДАКТИРОВАТЬ: просто еще один момент;то же самое происходит с герою, а не только на месте.

1 Ответ

1 голос
/ 07 марта 2012

Задержанное задание захватывает трассировку стека для всех неудачных заданий. Он сохраняется в столбце last_error таблицы delayed_jobs. Используйте графический интерфейс базы данных, чтобы увидеть, что происходит.

Если вы должны использовать Формуляр коллективных идей с ActiveRecord в качестве бэкэнда , вы можете запросить модель как обычно. Чтобы получить массив всех трассировок стека, например, выполните

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

По умолчанию неудачные задания удаляются после 25 неудачных попыток. Может быть, что больше нет рабочих мест. Запретить удаление в целях отладки, установив

Delayed::Worker.destroy_failed_jobs = false

в вашем config/initializers/delayed_job_config.rb

...