PayPal结账SDK在Ruby 3.0.1中出现故障。

6

Ruby 3.0.1

Rails 6.1.3.2

执行 PayPal OrdersCreateRequest 失败,出现以下错误

NoMethodError (undefined method `escape' for URI:Module):

回溯指向.rvm/gems/ruby-3.0.1/gems/paypalhttp-1.0.0/lib/paypalhttp/serializers/form_encoded.rb:8:in `block in encode',该行代码包含在paypalhttp v1.0.0版本中。

encoded_params.push("#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}")

显然,在这里(https://github.com/ruby/uri/issues/14)中声明,URI.escape方法已在ruby 3中被移除。

是否有解决方法,或者我必须等待Paypal更新gem?我不想降级到ruby 2.x。


1
有一个开放的PR https://github.com/paypal/paypalhttp_ruby/pull/4 我猜唯一的选择是切换回Ruby 2.x :-( - kev
1个回答

6
你可以进行猴子补丁:
# /config/initializers/functions_overrides.rb

require 'uri'

module URI
  def self.escape(*args)
    URI.encode_www_form_component(*args)
  end
end

更新: 添加require 'uri'和包含初始化器路径的注释。感谢 @prd-rsd 的提示。


2
我喜欢 Ruby 的一个很好的例子 :) - mecampbellsoup
2
应该放在/config/initializers/functions_overrides.rb文件中,并添加在第一行: require 'uri' - PRD RSD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接