我对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
还有更好的方法吗?
答案 0 :(得分:0)
您可以使用任何solution for background jobs processing。 Here是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