我有一个带回形针附件的模型(图像或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
我没有想法如何调试此问题。
没有例外。我还尝试记录反引号调用的返回值,但这并没有返回任何内容。
请提出我应该检查的任何想法。
答案 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是一些如何搞砸我的生产环境中的东西。分期和开发环境是容忍的。