发送响应后,在sinatra中运行代码

时间:2018-07-10 13:56:13

标签: ruby post sinatra shopify webhooks

我对Ruby和Sinatra还是很陌生,我正在尝试建立一个基本的sinatra服务器来侦听HTTP发布请求,然后处理数据。

我需要在5秒钟内发送响应,或者发送POST的服务器(shopify)认为请求失败,然后再次发送。为了避免这种情况,Shopify建议将处理推迟到发送响应之后。

我不确定在Sinatra发送响应后如何触发我的处理。

这项工作有用吗?

require 'sinatra'
require 'json'

webhook_data = Order.new
post '/' do
    request.body.rewind
    data = request.body.read
    webhook_data.parsed_json = JSON.parse(data)
    puts "My response gets sent here, right ?"
end

after do
    #DO MY PROCESSING HERE
end

还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用任何solution for background jobs processingHere是Sinatra使用Sidekiq的示例。

您也可以尝试使用线程:

set :threaded, true

post '/' do
    request.body.rewind
    data = request.body.read
    Thread.new do
      # data processing staff goes here
    end
    # here goes response
end