因此,为了获得从Zapier返回的值,我创建了两个路由和一个全局类缓存。
class Zapier
require 'httparty'
def initialize
@answer = ""
@id = 0
end
def request(uri, task)
last_event = Event.last
puts last_event.inspect
if last_event.nil?
last_id = 0
else
last_id = last_event.event_id
end
event_id = last_id + 1
Event.find_or_create_by(event_id: event_id)
result = HTTParty.post(uri.to_str,
:body => {id: event_id, task: task}.to_json,
:headers => {'content-Type' => 'application/json'})
@answer = ""
@id = event_id
end
def response(event_id, value)
if event_id != @id
@answer = ""
else
@answer = value
end
end
def get_answer
@answer
end
end
和我的控制器:
class ZapierEventsController < ApplicationController
require 'zapier_class'
before_action :get_task, only: [:get]
before_action :get_response, only: [:set]
@@zapier ||= Zapier.new
def get
@@zapier.request('https://hooks.zapier.com',@task)
sleep 10 #Wait for response
@value = @@zapier.get_answer
render json: { 'value': @value }, status:
end
def set
@@zapier.response(@id, @value)
render json: { 'status': 'ok' }, status: 200
end
def get_task
@task = params["task"]
end
def get_response
@id = Integer(params["id"])
@value = params["value"]
end
end
现在我要做一个任务管理员