在rails app中异步加载Braintree ClientToken

时间:2015-06-29 05:23:43

标签: ruby-on-rails braintree braintree-rails

我目前正在使用gon gem在braintree中加载client_token。

下面显示了控制器方法:

def new
    @rental_info = display_rental_info(params[:rental_request_new_form])
    @product = Product.find(params[:rental_request_new_form][:product_id])
    gon.client_token = generate_client_token
end

private

def generate_client_token
    Braintree::ClientToken.generate(customer_id: current_user.braintree_customer_id)
end

很快,我意识到了这种潜在的问题。如果与Braintree的连接速度很慢,它只会保留请求并阻止所有其他请求。有时(极少数情况下),加载请求需要6-10秒。有一次它在等待60秒后实际导致Net::OpenTimeout - execution expired错误..

我想知道什么是解决这个问题的好方法,并防止它阻止其他请求

1 个答案:

答案 0 :(得分:1)

我在Braintree工作。您在我们的生产环境中看到的ClientToken.generate端点的响应时间不常见,但可能在我们的沙箱环境中有所体验。我建议您与support team联系,以进一步诊断此问题。

此外,在单个请求中呼叫Braintree不应阻止对您的Web服务器的其他请求。 Web服务器同时处理多个请求。如果您尝试异步调用ClientToken.generate,它将允许您在收到Braintree令牌时对此请求执行其他服务器端处理,但我会权衡在提交之前并行处理单个请求的好处更复杂的。