4

我有一个照片共享应用程序,允许用户拖放图像,然后在延迟作业中处理这些图像并显示在画廊中。我在解决iPhone 图片上的方向问题时遇到了一些问题。我有以下代码:

初始化程序/auto_orient.rb

module Paperclip
  class AutoOrient < Paperclip::Processor 
    def initialize(file, options = {}, *args)
      @file = file
    end

    def make( *args )
      dst = Tempfile.new([@basename, @format].compact.join("."))
      dst.binmode

      Paperclip.run('convert',"#{File.expand_path(@file.path)} -auto-orient #{File.expand_path(dst.path)}")

      return dst
    end
  end
end

模型/图片.rb

class Picture < ActiveRecord::Base

  belongs_to :gallery

  before_create :generate_slug
  after_create :send_to_delayed_job

  validates :slug, :uniqueness => true

  scope :processing, where(:processing => true)

  attr_accessible :image

  has_attached_file :image,
  :styles => {
    :huge => "2048x1536>",
    :small => "800x600>",
    :thumb => "320x240>"
  },
  :processors => [:auto_orient, :thumbnail]

  before_post_process :continue_processing

  ...

  def process
    self.image.reprocess!
    self.processing = false
    self.save(:validations => false)
  end

  private

  def continue_processing
    if self.new_record?
      !self.processing
    end
  end

  def send_to_delayed_job
    Delayed::Job.enqueue ImageProcess.new(self.id), :queue => 'paperclip'
  end
end

模型/image_process.rb

class ImageProcess < Struct.new(:picture_id)

  def perform
    picture = Picture.find(self.picture_id)
    picture.process
  end

end

如果我注释掉这些行after_create :send_to_delayed_jobbefore_post_process即当场完成处理,则自动定位过程有效。但是,当我完成延迟工作时,不会发生自动定位,只是调整大小。

有没有人有任何想法?

编辑

它变得陌生。我搬到了 Carrierwave 和carrierwave_backgrounder gem。现在忽略后台任务,我的内容如下image_uploader.rb

def auto_orient
  manipulate! do |img|
    img.auto_orient!
    img
  end
end

version :huge do
  process :auto_orient
  process resize_to_fit: [2048,1536]
end

这行得通。图像方向正确。

现在,如果我按照载波 wave_backgrounder 的说明添加process_in_background :image到我的picture.rb文件中,auto_orient 将不起作用。

我现在要试试这个store_in_background方法,看看是否有什么不同。

4

1 回答 1

0

我注意到你attr_accessible的图片模型中有。我最近一直在使用 Delayed_Job,经过数小时的努力,我发现它与attr_accessible. 不过,有一些解决方法。

更多信息在这里(尽管您可以谷歌了解更多关于该主题的信息)

于 2013-05-07T05:16:08.353 回答