我目前正在使用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
错误..
我想知道什么是解决这个问题的好方法,并防止它阻止其他请求
答案 0 :(得分:1)
我在Braintree工作。您在我们的生产环境中看到的ClientToken.generate端点的响应时间不常见,但可能在我们的沙箱环境中有所体验。我建议您与support team联系,以进一步诊断此问题。
此外,在单个请求中呼叫Braintree不应阻止对您的Web服务器的其他请求。 Web服务器同时处理多个请求。如果您尝试异步调用ClientToken.generate,它将允许您在收到Braintree令牌时对此请求执行其他服务器端处理,但我会权衡在提交之前并行处理单个请求的好处更复杂的。