Rails gemfile版本约束问题

时间:2015-10-23 10:25:55

标签: ruby-on-rails gemfile

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

在我的gemfile中,我已经将devise 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。但每当我在我的项目主目录中捆绑show时,它会给出错误"Could not find devise-3.4.1 in any of the sources"

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

1 个答案:

答案 0 :(得分:1)

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

了解运营商~>

当您在Gemfile bundler中添加新gem时,必须考虑到您具有依赖关系,然后运算符~>开始执行,它将尝试查找所有gems文件中列出的所有gem的完整版本您的Gemfile并不会被锁定到特定版本,它将锁定到低于第一个数字的版本范围。

了解bundle install

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