Ubuntu GCP虚拟机部署Rails应用遇LoadError:无法加载async-websocket
async-websocket加载失败问题 在Ubuntu系统的GCP虚拟机上部署Ruby 2.7.1 + Rails 6.0.2.2应用时,执行bundle install后出现以下错误:
LoadError: cannot load such file -- async-websocket
/home/user1/project1/config/application.rb:7:in<top (required)>' /home/user1/project1/Rakefile:4:inrequire_relative'
/home/user1/project1/Rakefile:4:in<top (required)>' /home/user1/.rvm/gems/ruby-2.7.1@project1/gems/rake-13.2.1/exe/rake:27:in<top (required)>'
/home/user1/.rvm/gems/ruby-2.7.1@project1/bin/ruby_executable_hooks:22:ineval' /home/user1/.rvm/gems/ruby-2.7.1@project1/bin/ruby_executable_hooks:22:in'
本地已安装的async相关gem列表:
user1@ubuntu:~/project1$ gem list async *** LOCAL GEMS *** async (1.32.1) async-http (0.60.2) async-io (1.43.2) async-pool (0.4.0) async-websocket (0.8.0)
尝试更换async-websocket版本后问题仍未解决,可按以下步骤排查:
确认Gemfile中已声明依赖
检查项目根目录的Gemfile,确保包含async-websocket的声明:gem 'async-websocket' # 如需指定版本可添加:gem 'async-websocket', '~> 0.8.0'Bundler仅加载Gemfile中声明的依赖,本地手动安装的gem不会被自动识别。
重新同步Bundler依赖
先切换到正确的RVM gemset:rvm use ruby-2.7.1@project1清理无效缓存并重新安装依赖:
bundle clean --force bundle install --full-indexbundle clean会移除Gemfile.lock未声明的gem,--full-index可避免索引缓存导致的依赖识别问题。验证Bundler环境下的gem可用性
执行以下命令确认Bundler环境中是否能找到async-websocket:bundle exec gem list async-websocket若输出为空,说明依赖未被Bundler纳入管理,执行
bundle update async-websocket更新Gemfile.lock同步依赖。检查application.rb加载逻辑
错误触发点在config/application.rb第7行,确认该行是否直接或间接调用了require 'async-websocket'。若为第三方依赖间接引入,显式在Gemfile中声明该gem可确保Bundler正确加载。重置RVM gemset隔离环境
若存在gem版本冲突,可清空当前gemset后重新安装依赖:rvm gemset empty project1 rvm use ruby-2.7.1@project1 --create bundle install
内容的提问来源于stack exchange,提问作者Ashwin Kumar

