Rails gemfile 版本限制问题

Rails gemfile version constraint issue

我在本地机器上安装了两个版本的 devise gem,即 devise(3.5.1) 和 devise(3.5.2)。

在我的 gem 文件中,我包含了具有悲观版本约束的设计 gem,如下所示。

gem 'devise' , '~> 3.4'

设计的依赖关系 gem:

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 的较新版本并更新您的依赖项。

理解运算符~>:

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

明白bundle install:

bundle install 命令查找 Gemfile.lock 中列出的 gem,并且无论您的 Gemfile 中有哪个运算符,都不会更新或更改任何 gem 版本。