如何修复Rails集成PayPal REST API时URI:Module无escape方法的NoMethodError
错误原因
- 该报错由PayPal Ruby SDK与当前运行的Ruby版本不兼容导致:Ruby 3.0及以上版本正式移除了早前已被标记为废弃的
URI.escape方法,而旧版本的PayPal SDK内部依赖这个已删除的方法,因此调用@client.execute request时触发异常。 - 你参考的教程发布时间较早,配套使用的SDK版本仅适配Ruby 2.x系列,若你本地Ruby版本高于2.7就会触发该问题。
修复方案
方案1:升级PayPal官方SDK(推荐)
PayPal官方已在新版SDK中修复了该兼容问题,直接更新Gemfile中的PayPal依赖配置即可:
# Gemfile gem 'paypal-checkout-sdk', '~> 1.0.4'
修改后执行命令安装新版本:
bundle update paypal-checkout-sdk
重启Rails服务后即可正常运行。
方案2:临时补丁(仅应急使用)
如果你暂时无法升级SDK,可以手动补全缺失的URI.escape方法,在Rails项目config/initializers目录下新建uri_escape_patch.rb补丁文件,内容如下:
# config/initializers/uri_escape_patch.rb unless URI.respond_to?(:escape) module URI def self.escape(*args) CGI.escape(*args) end end end
添加后重启Rails服务即可生效。该方案仅为临时兼容处理,长期使用建议优先升级官方SDK避免出现其他兼容问题。
内容的提问来源于stack exchange,提问作者teduniq
相关产品推荐
相关产品推荐

