2

主にIOオブジェクトをマーシャリングまたはシリアル化できないため、ファイルのアップロードが一時ファイルに変換される前にリクエストオブジェクトにアクセスし、後で処理するためにキューに追加したいと考えています。これどうやってするの?

また、後でリクエストを「やり直す」必要があります。Railsリクエストライフサイクルのどの時点でこれを行うためにフックしますか?

4

3 に答える 3

2

ルートのコード例:rb:

post 'incoming_email' => Proc.new { |env|
  RequestCache.create!(
    data: env['rack.input'].read,
    content_type: env['CONTENT_TYPE'],
    content_length: env['CONTENT_LENGTH']
  )

  [200, {'Content-Type' => 'text/plain'}, ['OK']]
}

およびモデル内:

class RequestCache < ActiveRecord::Base
  attr_accessible :data, :content_length, :content_type

  def params
    Rack::Request.new({
      'rack.input' => StringIO.new(data),
      'CONTENT_LENGTH' => content_length,
      'CONTENT_TYPE' => content_type
    }).POST
  end
end
于 2012-05-29T17:34:35.163 に答える
1

ええと、これを行うためだけに、そのような複雑なことをする必要はありません。

バックグラウンド プロセスでアップロードする場合は、単にdelayed_pa​​perclipを使用できます。このgemはdelayed_jobを使用し、バックグラウンドプロセスでアップロード、サイズ変更、s3への送信(必要な場合)を処理します。

于 2012-05-29T15:09:33.017 に答える