ruby 3.0.1 中的 paypal-checkout-sdk 中断

kev*_*kev 6 paypal ruby-3

红宝石3.0.1

轨道 6.1.3.2

执行 Paypal OrdersCreateRequest 失败并出现此错误

NoMethodError (undefined method `escape' for URI:Module):
Run Code Online (Sandbox Code Playgroud)

.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)}")
Run Code Online (Sandbox Code Playgroud)

显然 URI.escape 方法在 ruby​​ 3 中已被删除,如此处所述https://github.com/ruby/uri/issues/14

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

mal*_*sar 6

你可以给它打上猴子补丁:

# /config/initializers/functions_overrides.rb

require 'uri'

module URI
  def self.escape(*args)
    URI.encode_www_form_component(*args)
  end
end
Run Code Online (Sandbox Code Playgroud)

更新: 添加require 'uri'并注释初始值设定项路径。感谢您的提示@prd-rsd。

  • 很好的例子,说明了我为什么喜欢 Ruby :) (2认同)
  • 它应该位于:/config/initializers/functions_overrides.rb 并在第一行添加:`require 'uri'` (2认同)