You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby 3.0.1环境下paypal-checkout-sdk出现URI.escape未定义错误如何解决

报错原因

Ruby 3.0+ 版本已正式移除废弃已久的 URI.escape 方法,而你当前使用的 paypalhttp v1.0.0 版本仍在调用该方法做参数编码,因此触发 NoMethodError 报错。

临时解决方案

无需降级Ruby版本,也不用等PayPal官方更新gem,可通过以下两种方式解决:

  • 方案1:添加全局补丁(更推荐,不会因为重新安装gem失效)
    在Rails项目的config/initializers目录下新建uri_escape_patch.rb文件,写入如下代码:
# 兼容Ruby3+ 补回URI.escape方法
unless URI.respond_to?(:escape)
  def URI.escape(str, unsafe = URI::UNSAFE)
    URI.encode_www_form_component(str).gsub('+', '%20')
  end
end

添加后重启Rails服务即可生效,该补丁逻辑和原URI.escape行为一致,不会影响其他业务逻辑。

  • 方案2:直接修改gem源码
    找到报错提示的paypalhttp-1.0.0/lib/paypalhttp/serializers/form_encoded.rb文件,将第8行的URI.escape替换为URI.encode_www_form_component,修改后代码如下:
encoded_params.push("#{URI.encode_www_form_component(k.to_s)}=#{URI.encode_www_form_component(v.to_s)}")

该方案缺点是后续重新执行bundle install更新/重装gem后,修改会被覆盖,需要重新操作。

后续建议

等PayPal官方发布兼容Ruby3的paypalhttp版本后,升级gem再删除上述补丁即可,不会产生兼容冲突。

内容的提问来源于stack exchange,提问作者kev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 14:06:05