执行bundle exec rake db:migrate时出现不兼容LoadError错误求助
执行
bundle exec rake db:migrate时的LoadError问题解决 环境信息
- Ruby版本:3.2.2
- Rails版本:6.1.6
错误信息
执行bundle exec rake db:migrate时触发如下错误:
rake aborted! LoadError: 链接到不兼容的库 - /home/anubha/.rvm/gems/ruby-2.7.2/gems/date-3.3.3/lib/date_core.so <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/.rvm/gems/ruby-2.7.2/gems/date-3.3.3/lib/date.rb:4:in `<top (required)>' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/.rvm/gems/ruby-2.7.2/gems/activesupport-6.1.7.3/lib/active_support/messages/metadata.rb:3:in `<top (required)>' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/.rvm/gems/ruby-2.7.2/gems/activesupport-6.1.7.3/lib/active_support/message_verifier.rb:6:in `<top (required)>' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/.rvm/gems/ruby-2.7.2/gems/railties-6.1.7.3/lib/rails/application.rb:7:in `<top (required)>' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/.rvm/gems/ruby-2.7.2/gems/railties-6.1.7.3/lib/rails.rb:13:in `<top (required)>' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/.rvm/gems/ruby-2.7.2/gems/railties-6.1.7.3/lib/rails/all.rb:5:in `<top (required)>' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' <internal:/home/anubha/.rbenv/versions/3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require' /home/anubha/staging/wel-admin/config/application.rb:3:in `<top (required)>' /home/anubha/staging/wel-admin/Rakefile:4:in `require_relative' /home/anubha/staging/wel-admin/Rakefile:4:in `<top (required)>' /home/anubha/.rvm/gems/ruby-2.7.2/gems/rake-13.0.6/exe/rake:27:in `<top (required)>' /home/anubha/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:22:in `eval' /home/anubha/.rvm/gems/ruby-2.7.2/bin/ruby_executable_hooks:22:in `<main>' (See full trace by running task with --trace)
问题分析
从错误路径能明显看出:当前运行的是rbenv管理的Ruby 3.2.2,但加载的date_core.so却是rvm管理的Ruby 2.7.2的gem库文件——这是Ruby版本与gem编译版本不兼容导致的,同时系统里同时存在rvm和rbenv两个版本管理工具,进一步加剧了环境混乱。
解决步骤
统一Ruby版本管理工具
- 选一个工具保留(比如rbenv),卸载另一个(rvm),彻底避免环境变量冲突。
- 暂时不想卸载的话,先确保当前会话只激活一个工具:
- 用rbenv的话:先执行
rvm use system切到系统Ruby,再执行rbenv local 3.2.2锁定项目Ruby版本。 - 用rvm的话:先执行
rbenv global system,再执行rvm use 3.2.2切换到目标版本。
- 用rbenv的话:先执行
重装适配当前Ruby版本的gem
进入项目目录,执行以下命令清理旧依赖并重装:rm -rf vendor/bundle gem uninstall date bundle install确保bundle安装的gem都存放在当前Ruby版本的gem目录下,而非其他版本的目录。
验证环境一致性
执行以下命令确认Ruby和gem路径匹配:which ruby which gem两个命令的输出路径必须对应同一个Ruby 3.2.2版本。
重新执行迁移
bundle exec rake db:migrate
内容的提问来源于stack exchange,提问作者Anubha
相关产品推荐
相关产品推荐

