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

Ruby on Rails服务启动失败:所有rake命令均无法执行

问题解决:devise-jwt与dry-configurable版本不兼容导致启动失败

错误原因

你遇到的问题核心是devise-jwt 0.8.1版本与新版dry-configurable gem不兼容。dry-configurable更新后废弃了原有setting方法的参数格式:

  • 不再支持通过位置参数传递默认值,需改用default:关键字参数
  • 不再支持通过块传递构造逻辑,需改用constructor:关键字参数

这些废弃警告最终引发ArgumentError,导致Rails环境初始化失败。

解决方案

方案1:锁定dry-configurable到兼容版本(最简单)

在项目Gemfile中添加对dry-configurable旧版本的锁定:

gem 'dry-configurable', '~> 0.13.0'

执行命令更新依赖:

bundle update dry-configurable

该版本的dry-configurable仍支持devise-jwt 0.8.1的旧语法,可直接解决问题。

方案2:修改devise-jwt源码适配新语法(临时应急)

若无法修改Gemfile,可直接修改devise-jwt的jwt.rb文件,将所有setting调用替换为新的关键字参数格式:
原代码示例:

setting(:secret, Warden::JWTAuth.config.secret) do |value|
  forward_to_warden(:secret, value)
end

替换为:

setting :secret, default: Warden::JWTAuth.config.secret, constructor: ->(value) { forward_to_warden(:secret, value) }

需对以下所有setting调用做同样修改:

  • expiration_time
  • dispatch_requests
  • revocation_requests
  • aud_header

方案3:升级devise-jwt到兼容新版dry-configurable的版本

devise-jwt后续版本已适配dry-configurable新语法,可尝试升级到稳定版本,比如:

gem 'devise-jwt', '~> 0.11.0'

执行命令更新:

bundle update devise-jwt

注意:升级前需确认新版本与你的Rails 5.1.2版本兼容,避免引入新冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:09:24