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

Rails API使用devise-jwt遇LoadError:无法自动加载常量JWTBlacklist

解决Rails中无法自动加载常量JWTBlacklist的LoadError问题

这个错误的核心原因是Rails自动加载机制对文件名和类名的大小写、命名约定有严格要求,你的代码里存在几处不匹配的地方,我来一步步帮你修复:

1. 统一类名和常量引用的大小写

你的user.rb里引用的是全大写前缀的JWTBlacklist,但实际模型类是小驼峰格式的JwtBlacklist,这会导致Rails找不到对应的常量。修改user.rb里的策略配置:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :lockable, :timeoutable, :omniauthable,
         :jwt_authenticatable, jwt_revocation_strategy: JwtBlacklist # 将JWTBlacklist改为JwtBlacklist
         
  def send_devise_notification(notification, *args)
    devise_mailer.send(notification, self, *args).deliver_later
  end
end

2. 确保文件名与类名严格匹配

Rails遵循「类名驼峰格式 → 文件名下划线全小写」的命名约定:

  • 类名JwtBlacklist对应的文件名必须是jwt_blacklist.rb(注意全小写,用下划线分隔单词)
  • 确认文件路径完全匹配错误提示里的预期路径:/home/sourabh/dev/celebration/app/models/jwt_blacklist.rb

如果你的模型文件名是JWTBlacklist.rb(大写开头),一定要改成jwt_blacklist.rb——Linux系统是大小写敏感的,文件名大小写不匹配会直接导致加载失败。

3. 重启Rails服务器

修改文件名或类名后,Rails的自动加载缓存可能不会立即生效,务必重启你的Rails开发服务器,让新的文件命名规则被系统识别。

额外验证步骤

可以在Rails控制台里测试常量是否能正常加载:

rails c
> JwtBlacklist # 如果能正常输出类信息,说明加载成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:00