Rails gemfile版本约束问题



我在我的本地机器上安装了两个版本的设计gem,分别是设计(3.5.1)和设计(3.5.2)。

在我的gemfile中,我包含了如下所示的带有悲观版本约束的gem。

gem 'devise' , '~> 3.4'

devise-encryptable-0.2.0 (devise (>= 2.1.0))
devise_invitable-1.4.0 (devise (>= 3.2.0))
devise_invitable-1.3.6 (devise (>= 3.2.0))
devise_security_extension-0.8.4 (devise (>= 2.0.0))
devise_security_extension-0.8.3 (devise (>= 2.0.0))
devise_security_extension-0.8.1 (devise (>= 2.0.0))
devise_security_extension-0.8.0 (devise (>= 2.0.0))

根据我的研究,这个操作符(~>)的含义是它将寻找设计版本>= 3.4但<4.0。但是每当我在我的项目主目录中执行bundle show时,它会显示错误为"Could not find devise-3.4.1 in any of the sources"

我的问题是为什么bundle show命令给出一个错误,如果有设计gem版本>= 3.4是可用的,并安装在我的机器上(在我的情况下设计版本3.5.2)。

你的Gemfile被锁定在这个版本上,这就是为什么你的bundle install命令不会寻找不同的版本,尝试运行bundle update devise,然后Rails将尝试寻找devise gem的新版本并更新你的依赖。

理解~>:

当你在Gemfile中添加新的gem时,bundler必须考虑到你有依赖性,然后操作符~>开始行动,它将尝试为Gemfile中列出的所有gem找到可完成的版本,并且不会被锁定到特定的版本,它将被锁定到低于第一个数字的版本范围。

理解bundle install:

bundle install命令查找Gemfile中列出的gem。

最新更新