【发布时间】:2015-06-29 05:23:42
【问题描述】:
我目前正在使用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 错误..
我想知道什么是解决这个问题并防止它阻塞其他请求的好方法
【问题讨论】:
-
可以异步调用生成token。
-
在 ajvascript 的前端?
-
我怀疑是否可以使用 resque 或 sidekiq,因为生成前端时需要 gon 的输出
-
那么你不能异步执行它 - 一个更好的问题是为什么 Braintree 需要这么长时间?
标签: ruby-on-rails braintree braintree-rails