将Rails 4.2升级至5.0.7.2时bundle update依赖冲突求助
Rails 4.2 升级到 5.0.7.2 依赖冲突解决方案
下面针对你遇到的所有依赖冲突,逐个给出具体修复方案:
1. 移除冗余的 actionpack 声明
Rails 核心包已经包含 actionpack,单独在 Gemfile 里声明会导致版本锁定冲突,直接删除这一行:
# gem "actionpack" # 删掉这行
2. 修复 jquery-rails 版本兼容问题
原版本 ~>3.1.2 要求 railties <5.0,和 Rails 5.0.7.2 冲突,升级到兼容 Rails 5 的版本:
gem 'jquery-rails', '~>4.3.5'
3. 统一 countries 和 country_select 版本
country_select ~>3.1.1 依赖 countries ~>2.0,直接给 countries 指定兼容版本:
gem "countries", "~>2.0"
4. 协调 i18n 版本冲突
activemerchant v1.43.3 依赖 i18n ~>0.5,而你指定了 ~>0.6,改用同时满足两边的版本:
gem 'i18n', '~>0.6.11'
5. 解决 json 版本矛盾
simplecov 0.17.1 需要 json >=1.8,activemerchant 需要 json ~>1.7,指定兼容的中间版本:
gem 'json', '~>1.8.6'
6. 降级 minitest 适配 Ruby 版本
minitest 5.16.3 要求 Ruby >=2.6,但 Rails 5.0.7.2 最低支持 Ruby 2.2.2,降级到兼容的版本:
gem 'minitest', '~>5.11.3'
7. 移除冗余的 mime-types 声明
carrierwave、paperclip、rest-client 都已经依赖 mime-types,单独声明会导致版本冲突,删除这一行:
# gem 'mime-types', '>=1.16' # 删掉这行
8. 确认 Ruby 版本范围
确保你的 Ruby 版本在 2.2.2 ~ 2.5.9 之间(Rails 5.0.7.2 支持的最高 Ruby 版本是 2.5.x),避免因 Ruby 版本过高导致的依赖冲突。
修改后的关键 Gemfile 片段示例
source 'https://rubygems.org' gem 'rails', '5.0.7.2' gem 'bundler', '1.17.3' gem 'etsy', '~>0.2.5' gem 'chargebee', '2.2.8' gem 'rest-client', '~>1.6.7' # 移除 mime-types 声明 gem 'oauth', '~>0.4.7' # ... 其他原有 gem 保持不变 ... # 修改 jquery-rails 版本 gem 'jquery-rails', '~>4.3.5' # ... 其他原有 gem 保持不变 ... # 指定 countries 版本 gem "countries", "~>2.0" # ... 其他原有 gem 保持不变 ... # 修改 i18n 版本 gem 'i18n', '~>0.6.11' # ... 其他原有 gem 保持不变 ... # 指定 json 版本 gem 'json', '~>1.8.6' # ... 其他原有 gem 保持不变 ... group :development, :test do gem "test-unit" gem "jasmine", "~>1.3.2" gem 'rspec' gem 'rspec-rails', '~>4.0.0' gem 'autotest-rails-pure', "~>4.1.2" gem 'shoulda' gem 'factory_bot', '4.11.1' # 降级 minitest gem 'minitest', '~>5.11.3' gem "mocha" gem 'fakeweb' gem 'database_cleaner' end
执行步骤
- 保存修改后的 Gemfile
- 运行
bundle install(如果仍有局部冲突,可尝试先执行bundle update rails锁定 Rails 版本,再处理其他依赖)
内容的提问来源于stack exchange,提问作者opensource-developer
相关产品推荐
相关产品推荐

