运行 发送响应后 sinatra 中的代码
Run code in sinatra after the response has been sent
我是 Ruby 和 Sinatra 的新手,我正在尝试设置一个基本的 sinatra 服务器来侦听 HTTP post 请求,然后处理数据。
我需要在 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
有没有更好的方法来做到这一点?
您可以使用任何 solution for background jobs processing. Here 是 Sidekiq 与 Sinatra 一起使用的示例。
您也可以尝试使用线程:
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
我是 Ruby 和 Sinatra 的新手,我正在尝试设置一个基本的 sinatra 服务器来侦听 HTTP post 请求,然后处理数据。
我需要在 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
有没有更好的方法来做到这一点?
您可以使用任何 solution for background jobs processing. Here 是 Sidekiq 与 Sinatra 一起使用的示例。
您也可以尝试使用线程:
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