2016-06-15 8 views
1

私はクリップ付きのモデル(画像またはpdfファイル)を持っています。私はSidekiqのバックグラウンドプロセスでこのモデルを処理しています。バックグラウンドプロセスでは、ファイル形式のパスワード保護やガベージコレクションを取り除くために、pdfファイルをimagemagick convert関数のpdfファイルストリングに変換しています。Imagemagick convertはコンソールからは動作しますが、Sidekiqでは動作しません

この変換は、開発環境の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

これはHerokuを使用していますか(プロダクションサーバー)ですか? – oreoluwa

+0

いいえ、Debianサーバです。また、ステージングサーバーと運用サーバーは同じ方法で構成する必要があります。 – Mika

+0

pry-remoteのようなものを使用し、ブレークポイントを設定し、何が起きているかを確認します。 – egze

答えて

1

私はconvertにいくつかのロギングを生成させる方法を理解し始めました。私がバックティックを変更した後、

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

というコードが呼び出されました。 magick_error.logにそれは、だから私はSTDERRに、この出力は、いくつかの方法が私の本番環境で物事を台無しにされたと思います

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

を生成します。ステージングと開発環境はそれを許容していました。

関連する問題