主にIOオブジェクトをマーシャリングまたはシリアル化できないため、ファイルのアップロードが一時ファイルに変換される前にリクエストオブジェクトにアクセスし、後で処理するためにキューに追加したいと考えています。これどうやってするの?
また、後でリクエストを「やり直す」必要があります。Railsリクエストライフサイクルのどの時点でこれを行うためにフックしますか?
主にIOオブジェクトをマーシャリングまたはシリアル化できないため、ファイルのアップロードが一時ファイルに変換される前にリクエストオブジェクトにアクセスし、後で処理するためにキューに追加したいと考えています。これどうやってするの?
また、後でリクエストを「やり直す」必要があります。Railsリクエストライフサイクルのどの時点でこれを行うためにフックしますか?
ルートのコード例: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
ええと、これを行うためだけに、そのような複雑なことをする必要はありません。
バックグラウンド プロセスでアップロードする場合は、単にdelayed_paperclipを使用できます。このgemはdelayed_jobを使用し、バックグラウンドプロセスでアップロード、サイズ変更、s3への送信(必要な場合)を処理します。