Rails4和Paperclip 4.0.2回调变为无限循环

时间:2014-08-23 19:50:17

标签: ruby-on-rails paperclip infinite-loop

我将回形针设置为My" Document"模型,具有相当标准的配置。它工作得很好,但我想在后台作业中使用Rest来分隔附加样式文件生成。

(我想停止创建:原始样式以手动分配文件,但它似乎不可能)

因此,要在后台作业中提取样式,我首先要停止回形针样式处理器。 然后我称之为再处理!在after_save回调中生成它们。

这样做会将更新操作置于无限循环中,而且正是在我调用重新处理时!

这是我的文档模型(为了理解目的而简化)

class Document < ActiveRecord::Base
  has_attached_file :attachment

   before_post_process :stop_process
   after_save :process_styles #same result with after_update (since user can only add attachment when updating profile)

   # Kill all paperclip styles
   #still generate the :orginal style. Block that too to copy it manually from remote folder would be nice 
   def stop_process
     false
   end

  #call for the generation of the additional styles (:medium, :thumb) 
  def process_styles
    Profile.processDocumentJob(id)
  end

  #will be a background job
  def self.processDocumentJob(id)
    document = Document.find(id)
    document.attachment.reprocess!
    document.save(validate: false)
  end
end

尽管我的document.save(validate:false),更新过程中的进程循环。 我尝试了after_update回调,调整了我的代码和条件,没有成功。 提前感谢您的宝贵帮助

1 个答案:

答案 0 :(得分:0)

我知道这是一个古老的问题,但今天发生在我身上并以这种方式解决了......有点hackh btw ......我并不为我的解决方案感到骄傲。这适用于Rails 5。

  1. 为我的模型“skip_callbacks”
  2. 添加了虚拟属性
  3. 添加了一个检查属性是否为true的方法“should_skip_callbacks?”
  4. 在我的回调中添加了“除非:: should_skip_callbacks?”条件
  5. 在回形针重新处理之前,将虚拟属性“skip_callbacks”设置为true
  6. 以下是我的模型的简化版本:

    class Organization < ApplicationRecord 
    
      attr_accessor :skip_callbacks
      has_attached_file :logo, styles: { header: "380x160>" }
      validates_attachment :logo, content_type: {content_type: ['image/png','image/jpg','image/gif']}
    
      after_save :reprocess_logo, unless: :should_skip_callbacks?
    
      def should_skip_callbacks?
        self.skip_callbacks
      end   
    
      def reprocess_logo
        self.skip_callbacks = true
        self.logo.reprocess!
      end   
    
    
    end