Imagemagick转换工作从控制台但不在Sidekiq

时间:2016-06-15 07:13:32

标签: ruby-on-rails imagemagick sidekiq

我有一个带回形针附件的模型(图像或pdf文件)。我在Sidekiq的后台进程中处理这个模型。在后台进程中,我将pdf文件转换为带有imagemagick转换功能的pdf文件字符串,以便摆脱文件格式中的任何密码保护或垃圾。

这个转换在我的开发环境的sidekiq和我的登台服务器的sidekiq上运行良好,但它不适用于生产服务器的sidekiq。在我的生产服务器上,如果我从Rails控制台运行转换方法,它正在工作。如果它不起作用,dst文件为空,返回的字符串为''

模型看起来像这样

class Receipt < ActiveRecord::Base

  has_attached_file :image, styles: { original: {} }, path: ':rails_root/attachments/:class/:attachment/:id_partition/:style/:filename'

  validates_attachment_content_type :image, :content_type => IMAGE_MIME_TYPES

  def convert_pdf_to_pdf_string
    if %w(application/pdf application/octet-stream).include?(image.content_type)
      begin
        dst = Tempfile.new([File.basename(image.path, File.extname(image.path)), '.pdf'], :encoding => 'ascii-8bit')
        dst.flush
        `convert -density 200 #{image.path.shellescape} #{dst.path.shellescape}`
        dst
        str = File.open(dst.path, 'rb') {|f| f.read}.to_s
      ensure
        dst.close
        dst.unlink
      end
    end
  end
end

我没有想法如何调试此问题。

没有例外。我还尝试记录反引号调用的返回值,但这并没有返回任何内容。

请提出我应该检查的任何想法。

1 个答案:

答案 0 :(得分:1)

我开始弄清楚如何让convert生成一些日志记录。我将反引号调用后改为

`convert -density 200 #{image.path.shellescape} #{dst.path.shellescape} 2>log/magick_error.log 1>log/magick.log`

代码开始起作用。进入magick_error.log,它会产生

    **** Warning: File has some garbage before %PDF- .

所以我猜这个输出到STDERR是一些如何搞砸我的生产环境中的东西。分期和开发环境是容忍的。