报错Uninitialized constant MercadoPago::SDK,已引入mercadopago-sdk gem仍异常
解决
uninitialized constant MercadoPago::SDK 错误 嘿,这个问题我之前帮人排查过,大概率是gem加载或者命名空间使用的问题,我给你列几个排查步骤:
1. 先确认gem安装和加载没问题
首先,你得确保Gemfile里已经加了这个gem:
gem 'mercadopago-sdk'
然后跑一遍bundle install。如果是普通Ruby项目不是Rails的话,记得手动加require 'mercadopago'在代码开头;如果是Rails项目,虽然bundler会自动加载,但偶尔也会出问题,你可以试试在控制器顶部或者config/application.rb里手动加这个require语句。
2. 检查SDK的初始化方式是否匹配版本
不同版本的mercadopago-sdk用法可能不一样,你遇到的错误很大概率是因为版本不对导致命名空间不匹配:
- 如果你用的是较新的版本,正确的初始化方式应该是创建SDK实例,而不是直接操作
MercadoPago::SDK的类属性:def show # 直接用client_id和secret初始化实例 sdk = MercadoPago::SDK.new(client_id: "XXXXXXXXXXXX", client_secret: "XXXXXXXXXXXXXXXXXXXXXX") # 或者用access token的话更简单:sdk = MercadoPago::SDK.new('YOUR_ACCESS_TOKEN') end - 要是你装的是旧版本,可能直接用
MercadoPago模块的configure方法就行:def show MercadoPago.configure do |config| config.client_id = "XXXXXXXXXXXX" config.client_secret = "XXXXXXXXXXXXXXXXXXXXXX" end end
你可以跑gem list mercadopago-sdk看看自己装的版本,再对应找下官方的用法说明。
3. 排查命名冲突
确认下你的项目里有没有自己定义过MercadoPago这个模块或者类,要是有的话会覆盖SDK的命名空间,就会出这个错误。
4. Rails项目记得重启服务器
如果你是在Rails里改了Gemfile或者require配置,一定要重启服务器!不然新的gem加载不会生效。
给你个最新版本的示例代码参考
require 'mercadopago' def show # 初始化SDK实例 sdk = MercadoPago::SDK.new( client_id: "XXXXXXXXXXXX", client_secret: "XXXXXXXXXXXXXXXXXXXXXX" ) # 比如调用API获取支付详情 payment = sdk.payment.get('PAYMENT_ID') puts payment.inspect end
内容的提问来源于stack exchange,提问作者Sebastian Ruiz Perez
相关产品推荐
相关产品推荐

