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

WSL2 Ubuntu部署ROR应用报错:uninitialized constant ActiveSupport::CurrentAttributes

解决Rails 4.2下uninitialized constant ActiveSupport::CurrentAttributes报错问题

问题根源

ActiveSupport::CurrentAttributes是Rails 5.0才新增的模块,你使用的Rails 4.2.11.3本身并不包含这个类。报错的核心原因是某个依赖gem强制拉取了高版本ActiveSupport,或者该gem本身要求Rails 5+版本,导致与当前Rails版本产生冲突。

排查修复步骤

1. 检查ActiveSupport实际版本

执行以下命令,查看Gemfile.lock中记录的ActiveSupport版本是否超出4.2.11.3:

grep -A 5 -B 5 "activesupport" Gemfile.lock

如果输出的版本为5.x或更高,即可确认是版本冲突导致的问题。

2. 定位引发冲突的gem

用下面的命令找出依赖高版本ActiveSupport的gem:

bundle list | while read line; do gem info $(echo $line | awk '{print $1}') -d | grep -q "activesupport.*>= 5" && echo $line; done

常见的冲突来源包括新版devise、高版本sidekiq,或是近两年更新的工具类gem。

3. 锁定gem的兼容版本

找到冲突的gem后,在Gemfile中指定其与Rails 4.2兼容的版本:
比如devise在Rails 4.2中最高兼容到4.7.x,修改Gemfile:

gem 'devise', '~> 4.7.3'

若是sidekiq,Rails 4.2兼容到6.5.x,可写为:

gem 'sidekiq', '~> 6.5.8'

修改完成后执行:

bundle update [冲突的gem名称]
bundle install

4. 清理缓存重装(可选)

如果上述步骤无效,清理bundle缓存后重新安装:

bundle clean --force
rm Gemfile.lock
bundle install

5. 排除WSL2环境干扰(可选)

虽然WSL2本身一般不会引发这类版本冲突,但可以做以下验证:

  • 确认当前使用的是WSL环境的Ruby,而非Windows系统的Ruby:
    which ruby
    # 输出应为WSL路径,例如 /home/你的用户名/.rbenv/shims/ruby
    
  • 检查全局gem是否存在高版本ActiveSupport:
    gem list | grep activesupport
    # 若有高版本,直接卸载:
    gem uninstall activesupport -v [高版本号]
    

额外提醒

Rails 4.2已于2020年停止维护,如果该应用需要长期维护,建议逐步升级到Rails 5.x及以上版本,避免后续出现更多依赖兼容问题。

内容的提问来源于stack exchange,提问作者James Bridgeford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:55:18