2

我想在文件上传转换为临时文件之前访问请求对象并将其添加到稍后处理的队列中,主要是因为 IO 对象无法编组或序列化。我怎样才能做到这一点?

我还需要稍后“重做”请求。我会在 Rails 请求生命周期的哪个时间点执行此操作?

4

3 回答 3

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
于 2012-05-29T17:34:35.163 回答
1

我不知道这有多可行,但我会使用机架中间件。

于 2012-05-29T14:35:17.767 回答
1

好吧,只是为了做到这一点,你不要做那样复杂的事情。

如果您想在后台进程中进行上传,您可以简单地使用delay_paperclip。这个gem使用delayed_job并在后台进程中处理上传、调整大小、发送到s3(如果需要)。

于 2012-05-29T15:09:33.017 回答