Ubuntu20.04运行Rails6 rake db:create报无法加载celluloid/current错误
报错根因定位
出现LoadError: cannot load such file -- celluloid/current的核心原因是依赖版本错配:项目中引入的private_pub、faye这类依赖Celluloid并发库的gem,拉取了重构过目录结构的Celluloid 0.18+版本,而这个版本已经移除了celluloid/current这个旧的加载入口,和你当前Ubuntu 20.04下的Ruby 2.5.8、Rails 6.0.3.6运行环境不兼容。
可落地解决步骤
按优先级从高到低操作,多数场景第一步即可解决问题:
- 锁定兼容的Celluloid版本
在项目根目录的Gemfile中添加版本锁定配置:gem 'celluloid', '0.17.4'
该版本是最后一个保留celluloid/current加载入口的稳定版本,完全适配Ruby 2.5.x。配置完成后执行bundle install完成安装。 - 修正private_pub的版本依赖
低于1.1.0版本的private_pub会硬拉取不兼容的Celluloid版本,哪怕你单独锁定了Celluloid版本,也会被依赖解析流程覆盖。把Gemfile中的private_pub依赖替换为:gem 'private_pub', '~> 1.1.1'
这个版本已经适配Rails 6,不再依赖Celluloid的废弃接口。 - 清理本地残留缓存
很多时候改完Gemfile还报错,是因为bootsnap、spring的进程缓存还在加载旧的gem文件,依次执行以下命令清理:rm -rf tmp/cache/bootsnapgem cleanup celluloidbundle exec spring stop
- 排查硬编码的错误引入语句
打开项目的config/application.rb,定位第4行的代码,如果存在硬写的require 'celluloid/current'语句,直接删掉这行即可。Celluloid 0.17+版本加载时不需要手动引入这个入口文件,多余的require语句反而会触发加载错误。 - 验证最终依赖版本
执行gem list celluloid确认实际安装的Celluloid版本为0.17.4,而非0.18及以上的版本。如果版本不匹配,删掉Gemfile.lock中Celluloid对应的旧记录,重新执行bundle install即可。
环境兼容注意事项
调整Ruby版本时要匹配Rails 6.0.3.6的官方支持范围:兼容的Ruby版本为2.5.0 ~ 2.7.x,不要切换到3.0及以上版本。Celluloid这类已停止维护的库在Ruby 3.0+环境下完全无法运行,会反复触发类加载错误。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

