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

Rails中使用Nexmo gem报错:undefined method `send_message',求排查

解决Rails中Nexmo gem提示"Undefined method send_message"的问题

这个问题大概率是因为Nexmo(现已更名为Vonage)的gem版本更新后,API方法名发生了变更——旧的send_message方法在新版本中已经被弃用了。下面是具体的排查和解决步骤:

1. 确认gem版本与迁移情况

Nexmo官方已经将gem迁移到了Vonage品牌下,现在推荐使用vonage gem而非旧的nexmo gem。如果你最近升级了gem,或者Gemfile里没有指定固定版本,就会遇到方法不存在的问题:

  • 检查你的Gemfile:如果是gem 'nexmo',现在它其实是vonage gem的别名,版本已经更新到了最新的Vonage API规范;
  • 如果是gem 'vonage',那肯定是用的新API,旧方法自然失效。

2. 修改代码适配新API

客户端初始化调整

旧版本的初始化方式:

nexmo = Nexmo::Client.new( key: 'xxxxxxx', secret: 'xxxxxxx' )

新版本(Vonage gem)需要调整参数名和类名:

nexmo = Vonage::Client.new( api_key: 'xxxxxxx', api_secret: 'xxxxxxx' )

发送短信的方法调整

旧的send_message方法已经被替换为sms.send,修改你的发送逻辑:

# 旧代码
response = nexmo.send_message( from: "SENDERID", to: @number, text: notification )

# 新代码
response = nexmo.sms.send( from: "SENDERID", to: @number, text: notification )

响应处理的小调整

新版本的响应对象结构略有变化,原来的哈希访问方式可以改成更面向对象的调用(两种方式都兼容,但面向对象写法更推荐):

# 旧的响应检查
if response['messages'].first['status'] == '0'

# 新版本写法
if response.messages.first.status == '0'

3. 如需保留旧版本API

如果你暂时不想适配新API,可以在Gemfile中指定旧版nexmo gem的版本,比如锁定到5.x系列(这是最后一批支持send_message的版本):

gem 'nexmo', '~> 5.0.0'

然后执行bundle install回滚版本,就能继续使用原来的代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:25:07