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
相关产品推荐
相关产品推荐

