将 mongo gem 更新到版本 5.0.0 并将 rails 更新到 4.0.0,它给出了问题 "Bundler could not find compatible versions for gem "railties"

updating mongoid gem to verison 5.0.0 and rails to 4.0.0, it is giving issue "Bundler could not find compatible versions for gem "railties"

同时 运行 捆绑包安装出现以下错误

Bundler could not find compatible versions for gem "railties":

在 Gemfile 中: devise (~> 3.2.4) 被解析为 3.2.4,这取决于 railties (< 5, >= 3.2.6)

factory_girl_rails (~> 4.4.0) was resolved to 4.4.1, which depends on
  railties (>= 3.0.0)

jquery-payment-rails was resolved to 0.0.1, which depends on
  railties (~> 4.0.0)

jquery-rails (~> 3.0.0) was resolved to 3.0.4, which depends on
  railties (< 5.0, >= 3.0)

rails (~> 4.0.0) was resolved to 4.0.0, which depends on
  railties (= 4.0.0)

rspec-rails (~> 3.4.0) was resolved to 3.4.2, which depends on
  railties (< 4.3, >= 3.0)

sass-rails (~> 3.2.3) was resolved to 3.2.3, which depends on
  railties (~> 3.2.0.beta)

宝石文件:

ruby '2.2.2'
## Sinatra App Gems
gem 'sinatra',      '~> 1.4.4'
gem 'sass',         '~> 3.4.13'
gem 'sinatra-assetpack', '~> 0.3.1', :require => 'sinatra/assetpack'
gem 'sinatra-env',  '~> 0.0.2'

## Rails App Gems
gem 'rails',        '~> 4.0.0'
gem 'foreman',      '~> 0.78.0'
gem 'puma',         '~> 2.14.0'
gem 'simple_form',  '~> 2.1.3'
gem 'simple_enum',  '~> 1.6.0', :require => 'simple_enum/mongoid'
gem 'mongoid',      '~> 5.0.0'
gem 'devise',       '~> 3.4.1'
gem 'possessive',   '~> 1.0.1'
gem 'american_date', '~> 1.1.0'
gem 'sht_rails',    '~> 0.2.2'
gem 'version',      '~> 1.0.0'
gem 'rdiscount',    '~> 2.1.7'
gem 'ssl_enforcer', '~> 0.2.3'
#

gem 'sidekiq',        '~> 3.5.0'
gem 'slim',           '~> 3.0.2'


group :development do
  gem 'capistrano',             '~> 3.4.0'
  gem 'capistrano-rvm',         '~> 0.1.2'
  gem 'capistrano-rails',       '~> 1.1.3'
  gem 'capistrano-bundler',     '~> 1.1.4'
  gem 'capistrano-foreman',     github: 'koenpunt/capistrano-foreman'
  gem 'spring'
  gem 'spring-commands-rspec',  '~> 1.0.4'
end

group :assets do
  gem 'pusher_rails',             '~> 1.0.1'
  gem 'sass-rails',               '~> 3.2.3'
  gem 'coffee-rails',             '~> 3.2.1'
  gem 'jquery-rails',             '~> 3.0.0'
  gem 'bootstrap-sass',           '~> 2.3.0.0'
  gem 'font-awesome-sass-rails',  '~> 3.0.2.2'
  gem 'uglifier',                 '>= 1.0.3'
  gem 'modernizr-rails',          '~> 2.7.1'
  gem 'jquery-payment-rails',     '~> 0.0.1'
  gem 'jquery-validation-rails',  '~> 1.13.1'
end

group :development, :test do
  gem 'test-unit',            '~> 3.0'
  gem 'rspec-rails',          '~> 3.3.3'
  gem 'factory_girl_rails',   '~> 4.5.0'
  gem 'mongoid-rspec',        '~> 1.13.0'
  gem 'guard-rspec',          '~> 4.6.4'
  gem 'simplecov',            '~> 0.10.0', require: false
end

group :test do
  gem 'database_cleaner',     '~> 1.5.1'
  gem 'faker',                '~> 1.5.0'
end

我也删除了 gemfile.lock 文件,但它仍然存在问题

好的,这里就railties版本要求的情况根据给你的错误稍微分析一下:

1) railties (>= 3.0.0)
2) railties (~> 4.0.0) => (< 4.1, >= 4.0.0)
3) railties (< 5.0, >= 3.0)
4) railties (= 4.0.0)
5) railties (< 4.3, >= 3.0)
6) railties (~> 3.2.0.beta) => (< 3.2.1, >= 3.2.0.beta)

除了来自sass-railsgem的6),这里的所有版本依赖都可以共存。尝试更新到最新版本 sass-rails,你会没事的(5.0.4 是最新版本)因为它使用 railties (>= 4.0.0, < 5.0)。此外,4.0.0 之后的所有 sass-rails 版本也可以工作,因为那时 railties 依赖项发生了变化 - see this.

更新

我已经检查了您的 Gemfile,为了获得所需的 mongo 版本,您可以做的最小更改如下(更改已注释):

ruby '2.2.2'
## Sinatra App Gems
gem 'sinatra',      '~> 1.4.4'
gem 'sass',         '~> 3.4.13'
gem 'sinatra-assetpack', '~> 0.3.1', :require => 'sinatra/assetpack'
gem 'sinatra-env',  '~> 0.0.2'

## Rails App Gems
gem 'rails',        '~> 4.0.0'
gem 'foreman',      '~> 0.78.0'
gem 'puma',         '~> 2.14.0'
gem 'simple_form',  '~> 3.0.0' # CHANGED
gem 'simple_enum',  '~> 1.6.0', :require => 'simple_enum/mongoid'
gem 'mongoid',      '~> 5.0.0'
gem 'devise',       '~> 3.4.1'
gem 'possessive',   '~> 1.0.1'
gem 'american_date', '~> 1.1.0'
gem 'sht_rails',    '~> 0.2.2'
gem 'version',      '~> 1.0.0'
gem 'rdiscount',    '~> 2.1.7'
gem 'ssl_enforcer', '~> 0.2.3'

gem 'sidekiq',        '~> 3.5.0'
gem 'slim',           '~> 3.0.2'

group :development do
  gem 'capistrano',             '~> 3.4.0'
  gem 'capistrano-rvm',         '~> 0.1.2'
  gem 'capistrano-rails',       '~> 1.1.3'
  gem 'capistrano-bundler',     '~> 1.1.4'
  gem 'capistrano-foreman',     github: 'koenpunt/capistrano-foreman'
  gem 'spring'
  gem 'spring-commands-rspec',  '~> 1.0.4'
end

group :assets do
  gem 'pusher_rails',             '~> 1.0.1'
  gem 'sass-rails',               '~> 4.0.1' # CHANGED
  gem 'coffee-rails',             '~> 4.0.0' # CHANGED
  gem 'jquery-rails',             '~> 3.0.0'
  gem 'bootstrap-sass',           '~> 2.3.0.0'
  gem 'font-awesome-sass-rails',  '~> 3.0.2.2'
  gem 'uglifier',                 '>= 1.0.3'
  gem 'modernizr-rails',          '~> 2.7.1'
  gem 'jquery-payment-rails',     :git =>  'https://github.com/thoughtbot/jquery-payment-rails.git', :ref => 'd401bf9' # CHANGED
  gem 'jquery-validation-rails',  '~> 1.13.1'
end

group :development, :test do
  gem 'test-unit',            '~> 3.0'
  gem 'rspec-rails',          '~> 3.4.0' # CHANGED
  gem 'factory_girl_rails',   '~> 4.5.0'
  gem 'mongoid-rspec',        '~> 3.0.0' # CHANGED
  gem 'guard-rspec',          '~> 4.6.4'
  gem 'simplecov',            '~> 0.10.0', require: false
end

group :test do
  gem 'database_cleaner',     '~> 1.5.1'
  gem 'faker',                '~> 1.5.0'
end

你可能应该 运行 bundle update 在此更改之后,但要小心,因为这会根据你的 Gemfile 更新所有 gems。