我想在将文件上传转换为临时文件之前访问请求对象,并将其添加到队列中以便稍后处理,主要是因为IO对象无法编组或序列化。我怎么能这样做?
我还需要在稍后“重做”请求。在rails请求生命周期的什么时候我会挂钩来做这个?
答案 0 :(得分:2)
代码示例,在routes.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
答案 1 :(得分:1)
我不知道这有多可行,但我会使用机架中间件。
答案 2 :(得分:1)
嗯,要做到这一点,你不要做那样复杂的事情。
如果您想在后台流程中上传,只需使用delayed_paperclip即可。此gem使用delayed_job并在后台进程中处理上传,调整大小,发送到s3(如果需要)。