【问题标题】:Run code in sinatra after the response has been sent发送响应后在 sinatra 中运行代码
【发布时间】:2018-07-10 13:56:13
【问题描述】:

我对 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

有没有更好的方法来做到这一点?

【问题讨论】:

  • 看看 Sidekiq、ActiveJob 和类似的东西。

标签: ruby post sinatra shopify webhooks


【解决方案1】:

您可以使用任何solution for background jobs processingHere 是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2011-05-17
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多