无法将Rails 5.2.3升级至6:bundle install遇版本兼容错误
问题描述
我已经把Gemfile更新为Rails 6版本,但每次执行bundle install时都会出现以下错误:
Bundler could not find compatible versions for gem "activerecord":
In Gemfile:
default_value_for was resolved to 3.1.0, which depends on
activerecord (>= 3.2.0, < 6.0)rails (~> 6.0, >= 6.0.4) was resolved to 6.1.0.rc1, which depends on activerecord (= 6.1.0.rc1)
以下是我的Gemfile内容:
source 'https://gems.ruby-china.com' gem 'rails', '~> 6.0', '>= 6.0.4' gem 'shirinji-rails' gem 'rack-cors', :require => 'rack/cors' gem 'olive_branch' gem 'health_check' #gem 'auto-session-timeout' gem 'pg' gem 'redis' gem 'oj' gem 'virtus' gem 'stringex', require: 'stringex_lite' gem 'attribute_normalizer' gem 'default_value_for' gem 'kaminari' gem 'pagy', '< 4.0' # https://iplocate.docs.apiary.io/#introduction/code-samples gem 'iplocate', '~> 1.0', '>= 1.0.1' # https://github.com/alexreisner/geocoder gem 'geocoder' gem 'sidekiq' gem 'sidekiq-cron' gem 'sidekiq-failures' gem 'sidekiq_alive' gem 'rdiscount' gem 'jbuilder', '~> 2.0' gem 'rack-attack' # FIXME: deprecated gem 'inky-rb', require: 'inky' gem 'premailer-rails' # /deprecated gem 'mimemagic' gem 'jwt' gem "slack-notifier" gem 'linkedin-oauth2' gem 'cloudinary' gem 'elasticsearch' gem 'aws-sdk-s3', '~> 1' gem 'pusher' gem 'addressable' gem 'active_model_serializers' # TODO: replace by jbuilder gem 'rubocop' ## TODO: deprecate the 2 first ones in favour of typhoeus gem 'rest-client', '~> 2.0.1' gem 'faraday' gem 'typhoeus' ## /TODO ## TODO: get rid of devise gem 'devise' gem 'devise-bootstrap-views' gem 'omniauth' ## /TODO ## TODO: remove SSR gem 'bootstrap-sass', '~> 3.4.1' gem 'autoprefixer-rails' gem 'sass-rails' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails' gem 'jquery-rails' gem 'clipboard-rails' gem 'turbolinks' gem 'momentjs-rails' gem 'rails_bootstrap_sortable' gem 'bootstrap-tagsinput-rails' gem 'haml' gem 'tinymce-rails' gem "font-awesome-rails" gem 'lazyload-rails' gem 'bootstrap-datepicker-rails' gem 'formvalidation-rails' gem 'nprogress-rails' gem 'kaminari-bootstrap' gem 'simple_form' ## /TODO gem 'has_scope' # TODO: remove ## TODO: remove when every image is migrated gem 'carrierwave-aws' gem 'carrierwave', '~> 1.0' gem 'mini_magick' ## /TODO gem 'pg_search' # TODO: use an index instead gem 'ruby-progressbar' gem 'staccato' # gem for payment processing gem 'paypal-checkout-sdk' gem 'pingpp' gem 'rqrcode' gem 'faker' # TODO: remove from seeds and move the gem to test # Monitoring Tools gem "sentry-ruby" gem "sentry-rails" gem "sentry-sidekiq" group :development do gem "spring" gem 'thin' end group :development, :test do # gem 'parallel_tests' gem 'rspec-rails', '>= 3.7.2' gem 'rspec-retry', '~> 0.6.2' gem 'factory_girl_rails' gem 'timecop' end group :test do gem 'database_cleaner' gem 'shoulda-matchers', require: false end group :production do gem 'puma', '< 6' end
解决方案
错误原因很明确:当前使用的default_value_for版本(3.1.0)仅兼容低于6.0版本的activerecord,但你安装的Rails 6.1.0.rc1依赖的是activerecord 6.1.0.rc1,版本冲突导致bundle安装失败。
解决步骤:
更新default_value_for到兼容Rails 6的版本
修改Gemfile中default_value_for的配置行,指定兼容Rails 6.x的版本:gem 'default_value_for', '>= 3.4.0'3.4.0及以上版本的
default_value_for已经支持Rails 6.x及更高版本的activerecord。清理并重新安装依赖
执行以下命令确保依赖更新生效:bundle update default_value_for bundle install备用方案
如果更新后仍存在兼容性问题,可以临时注释掉default_value_for(若项目中暂时不依赖该功能),先完成Rails升级,再逐步适配该gem的新版本。
内容的提问来源于stack exchange,提问作者NooBskie
相关产品推荐
相关产品推荐

