如何解决错误“捆绑器无法find适用于gemX的兼容版本”

我正在尝试为我的项目设置docker。 我曾尝试安装actionpack 5.0.2,但它并没有对我有任何好处。 我正在关注如何设置教程,所以我认为有版本问题。 当我运行docker-compose时,这是我得到的:

Bundler could not find compatible versions for gem "actionpack": In Gemfile: rails (~> 5.0.2) ruby depends on actionpack (= 5.0.2) ruby actionpack (>= 5.1.1, ~> 5.1) ruby 

这是我的Gemfile:

 source 'https://rubygems.org' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end gem 'devise' gem 'bootstrap-sass', '~> 3.3.6' gem 'sass-rails', '>= 3.2' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.0.2' # Use sqlite3 as the database for Active Record #gem 'sqlite3' # Use Puma as the app server gem 'puma', '~> 3.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 3.0' # Use ActiveModel has_secure_password gem 'bcrypt', :platforms => :ruby # Use Capistrano for deployment # gem 'capistrano-rails', group: :development group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platform: :mri end group :development do # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. gem 'web-console', '>= 3.3.0' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'unicorn', '~> 4.9' gem 'pg', '~> 0.18.3' gem 'sidekiq', '~> 4.0.1' gem 'redis-rails', '~> 4.0.0' gem 'actionpack', '~> 5.1', '>= 5.1.1' 

编辑:试图完全从gemfile中删除gem操作包,在docker上造成新的问题 – 组成:

 Bundler could not find compatible versions for gem "actionpack": In Gemfile: rails (~> 5.0.2) ruby depends on actioncable (= 5.0.2) ruby depends on actionpack (= 5.0.2) ruby rails (~> 5.0.2) ruby depends on actioncable (= 5.0.2) ruby depends on actionpack (= 5.0.2) ruby rails (~> 5.0.2) ruby depends on actioncable (= 5.0.2) ruby depends on actionpack (= 5.0.2) ruby rails (~> 5.0.2) ruby depends on actioncable (= 5.0.2) ruby depends on actionpack (= 5.0.2) ruby redis-rails (~> 4.0.0) ruby depends on redis-actionpack (~> 4) ruby depends on actionpack (~> 4) ruby ERROR: Service 'drkiq' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 6 

Gemfile中的这两行会引起依赖性冲突:

 gem 'rails', '~> 5.0.2' gem 'actionpack', '~> 5.1', '>= 5.1.1' 

~> 5.0.2表示“大于5.0.2且小于5.1.0 ”。

'~> 5.1', '>= 5.1.1'表示“大于5.1.1且小于6.0.0 ”。

因此存在冲突,Bundler无法解决。 您需要升级rails或降级操作包。

最简单的解决scheme可能只是Gemfile删除操作Gemfile ,因为你根本不需要指定它。 actionpackrails一个依赖,所以它会被安装。

我还build议你除去rails上的'~> 5.0.2'版本约束 ,除非你有一个很好的理由来locking版本号。

关于第二个错误的更新:

这个错误与上面非常相似。 这是不言而喻的。

 rails (~> 5.0.2) ruby depends on [...] actionpack (= 5.0.2) ruby redis-rails (~> 4.0.0) ruby depends on [...] actionpack (~> 4) ruby 

就像上面一样,你有一个gem依赖于actionpack版本v4.xx ,另一个gem依赖于actionpack v5.0.2

你需要以某种方式更新/放松你的Gemfile的版本约束。 例如,你可以写:

 gem 'redis-rails', '~> 5.0' 

您已经指定使用大于或等于5.1的actionpack:

 gem 'actionpack', '~> 5.1', '>= 5.1.1' 

不过Rails 5.0.2专门locking在actionpack 5.0.2上。 从你的Gemfile中删除上面的行,这是多余的。

显然你有依赖问题。

在你的Gemfile中使用:

 gem 'rails', '~> 5.1.0' gem 'actionpack', '~> 5.1.1'