1

プロセッサ内のPDFファイルにデジタル署名を挿入していますが、AWS::S3::ERRORS::Requestimeoutエラーが発生し続けます。このタイムアウトとは何ですか?ファイルがアップロードされるまで接続を開いたままにする方法はありますか?

サーバーへのソケット接続は、タイムアウト期間内に読み取りまたは書き込みが行われませんでした。アイドル接続は閉じられます。

これが私のコードです:

モデル:

...

has_attached_file :receipt_file,
                    :storage => :s3,
                    :s3_credentials => "#{Rails.root}/config/s3.yml",
                    :path => "/:style/:id/:filename",
                    :s3_protocol => "https",
                    :styles => {dummy:""},
                    processors: [:SignPdf]
 #process_in_background :receipt_file

...

プロセッサー

module Paperclip


    class SignPdf < Processor
      attr_accessor :receipt_id,:style
     S3_CONFIG = YAML.load_file("#{::Rails.root}/config/s3.yml")[Rails.env]
     ORIGAMIDIR = "/ruby/1.9.1/gems/origami-1.2.4/lib"


      def initialize(file, options = {}, attachment = nil)
        @file           = file
        @current_format = File.extname(@file.path)
        @basename       = File.basename(@file.path, @current_format)
        @attachment = attachment
      end

        def make

         signPdf(@file) 
         @file
      end

    end
end

begin
  require 'origami'
rescue LoadError
  $: << ORIGAMIDIR
  require 'origami'
end
include Origami
def signPdf(file)

        certFile = "#{::Rails.root}/lib/assets/Cert.pem"
        rsakeyFile = "#{::Rails.root}/lib/assets/pk.pem"
        passphrase = "o2Receipts"

        key4pem=File.read rsakeyFile
        key = OpenSSL::PKey::RSA.new key4pem, passphrase
        cert = OpenSSL::X509::Certificate.new(File.read certFile)

        pdf = PDF.read(file)
        page = pdf.get_page(1)

        # Add signature annotation (so it becomes visibles in pdf document)

        sigannot = Annotation::Widget::Signature.new
        sigannot.Rect = Rectangle[:llx => 89.0, :lly => 386.0, :urx => 190.0, :ury => 353.0]

        page.add_annot(sigannot)

        # Sign the PDF with the specified keys
        pdf.sign(cert, key, 
          :method => 'adbe.pkcs7.sha1',
          :annotation => sigannot, 
          :location => "Portugal", 
          :contact => "email@email.pt", 
          :reason => "Proof of Concept"
        )

        # Save the resulting file
        pdf.save(file.path)
        file
end      
4

2 に答える 2

0

アフターセーブを使用して、これを回避しました。ここでこの主題に関連する私の答えを参照してください

于 2012-09-10T16:07:55.387 に答える
0

あなたが探しているものは、今日の時点でドキュメントにありません。AWS :: S3::Clientを作成する必要があります

参照しています:https ://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb#L263

   config.paperclip_defaults = {
      storage: :s3,
      s3_credentials: "#{Rails.root}/config/s3.yml",
      s3_region: ENV['AWS_REGION'],
      s3_protocol: :https,
      s3_options: {
        client: Aws::S3::Client.new(
          access_key_id: ENV['S3_KEY'],
          secret_access_key: ENV['S3_SECRET'],
          http_open_timeout: 10,
          http_read_timeout: 5,
          http_idle_timeout: 20
        )
      }
    }
于 2017-02-28T20:17:40.960 に答える