我想在文件上传转换为临时文件之前访问请求对象并将其添加到稍后处理的队列中,主要是因为 IO 对象无法编组或序列化。我怎样才能做到这一点?
我还需要稍后“重做”请求。我会在 Rails 请求生命周期的哪个时间点执行此操作?
我想在文件上传转换为临时文件之前访问请求对象并将其添加到稍后处理的队列中,主要是因为 IO 对象无法编组或序列化。我怎样才能做到这一点?
我还需要稍后“重做”请求。我会在 Rails 请求生命周期的哪个时间点执行此操作?
代码示例,在 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
我不知道这有多可行,但我会使用机架中间件。
好吧,只是为了做到这一点,你不要做那样复杂的事情。
如果您想在后台进程中进行上传,您可以简单地使用delay_paperclip。这个gem使用delayed_job并在后台进程中处理上传、调整大小、发送到s3(如果需要)。